EDI Должен быть как минимум 1 экземпляр сегмента [UNS]

Я новичок в ЭДО. И я только что преобразовал файл ORDERS edi в XML, используя smooks API. Некоторые файлы примеров ORDER работают нормально в следующем примере. Но я получил следующее исключение при запуске следующего файла edi. Застрял с этим. Вот мой пример и данные EDI

package example;

import org.json.JSONObject;
import org.json.XML;
import org.milyn.Smooks;
import org.milyn.SmooksException;
import org.milyn.io.StreamUtils;
import org.milyn.smooks.edi.unedifact.UNEdifactReaderConfigurator;
import org.xml.sax.SAXException;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringWriter;

public class Main {
 public static int PRETTY_PRINT_INDENT_FACTOR = 4;
protected static String runSmooksTransform() throws IOException, SAXException, SmooksException {
    Smooks smooks = new Smooks();
    smooks.setReaderConfig(new UNEdifactReaderConfigurator("urn:org.milyn.edi.unedifact:d93a-mapping:*"));
    try {
        StringWriter writer = new StringWriter();

        smooks.filterSource(new StreamSource(new FileInputStream("EDI.edi")), new StreamResult(writer));

        return writer.toString();
    } finally {
        smooks.close();
    }
}

public static void main(String[] args) throws IOException, SAXException, SmooksException {

    System.out.println("\n\n==============Message In==============");
    System.out.println(readInputMessage());
    System.out.println("======================================\n");

    String messageOut = Main.runSmooksTransform();

    System.out.println("==============Message Out=============");
    System.out.println(messageOut);
    System.out.println("======================================\n\n");

    JSONObject xmlJSONObj = XML.toJSONObject(messageOut);
    String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
    System.out.println(jsonPrettyPrintString);
}

private static String readInputMessage() throws IOException {
    return StreamUtils.readStreamAsString(new FileInputStream("EDI.edi"));
}
}

И исключение с Sample EDI Data

Exception in thread "main" org.milyn.SmooksException: Failed to filter source.
at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:97)
at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:64)
at org.milyn.Smooks._filter(Smooks.java:526)
at org.milyn.Smooks.filterSource(Smooks.java:482)
at org.milyn.Smooks.filterSource(Smooks.java:456)
at example.Main.runSmooksTransform(Main.java:49)
at example.Main.main(Main.java:63)
Caused by: org.milyn.edisax.EDIParseException: EDI message processing failed [ORDERS][D:93A:UN].  Must be a minimum of 1 instances of segment [UNS].  Currently at segment number 9.
at org.milyn.edisax.EDIParser.mapSegments(EDIParser.java:499)
at org.milyn.edisax.EDIParser.mapSegments(EDIParser.java:450)
at org.milyn.edisax.EDIParser.parse(EDIParser.java:426)
at org.milyn.edisax.EDIParser.parse(EDIParser.java:410)
at org.milyn.edisax.unedifact.handlers.UNHHandler.process(UNHHandler.java:97)
at org.milyn.edisax.unedifact.handlers.UNBHandler.process(UNBHandler.java:75)
at org.milyn.edisax.unedifact.UNEdifactInterchangeParser.parse(UNEdifactInterchangeParser.java:113)
at org.milyn.smooks.edi.unedifact.UNEdifactReader.parse(UNEdifactReader.java:75)
at org.milyn.delivery.sax.SAXParser.parse(SAXParser.java:76)
at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:86)
... 6 more

person Muthu vignesh k    schedule 01.08.2017    source источник
comment
Похоже, smooks ищет сегмент UNS, которого нет в ваших данных. Контроль секций является обязательным в соответствии со стандартом D.93A. Поскольку вы не опубликовали свой файл EDI, я не знаю, правда ли это — могут быть другие проблемы с документом EDI.   -  person Andrew    schedule 02.08.2017
comment
Эндрю. Ты был прав. Файл EDI имеет неизвестные стандартные коды. Так что я получил исключение. Теперь он работает нормально после удаления неизвестных кодов.   -  person Muthu vignesh k    schedule 03.08.2017


Ответы (1)


Неверные исходные данные могут привести к этому.

Похоже, smooks ищет сегмент UNS, которого нет в ваших данных. Контроль секций является обязательным в соответствии со стандартом D.93A.

person Andrew    schedule 04.08.2017