Я пытаюсь прочитать сообщение EDI и преобразовать его в объект Java, но я закончил с нижеследующим исключением.Исключение в потоке EDI в Java Преобразование объектов
Исключение из потока "main" org.milyn.SmooksException: Не удалось фильтровать источник. на org.milyn.delivery.sax.SmooksSAXFilter.doFilter (SmooksSAXFilter.java:97) на org.milyn.delivery.sax.SmooksSAXFilter.doFilter (SmooksSAXFilter.java:64) в org.milyn.Smooks._filter (Smooks.java:526) на org.milyn.Smooks.filterSource (Smooks.java:482) на org.milyn.Smooks.filterSource (Smooks.java:456) на org.milyn.edi.unedifact.d97a .D97AInterchangeFactory.fromUNEdifact (D97AInterchangeFactory.java:58) на org.milyn.edi.unedifact.d97a.D97AInterchangeFactory.fromUNEdifact (D97AInterchangeFactory.java:40) в com.ibm.gpohub.edi.common.SmooksSample.main (SmooksSample.java:18) Вызвано: org.milyn.edisax.EDIParseException: обработка сообщений EDI не выполнен [ORDRSP] [D: 97A: UN]. Сегмент [FTX], поле 4 (TEXT_LITERAL), Компонент 1 (Free_text _-_-1) должен содержать значение. В настоящее время на номере сегмента 6. На org.milyn.edisax.EDIParser.mapComponent (EDIParser.java:687) при org.milyn.edisax.EDIParser.mapField (EDIParser.java:636) в org.milyn.edisax .EDIParser.mapFields (EDIParser.java:606) по адресу org.milyn.edisax.EDIParser.java:564) по адресу org.milyn.edisax.EDIParser.mapSegments (EDIParser.java:535) по адресу org .milyn.edisax.EDIParser.mapSegments (EDIParser.java:453) по адресу org.milyn.edisax.EDIParser.parse (EDIParser.java:428) по адресу org.milyn.edisax.EDIParser.parse (EDIParser.java:410)) в org.milyn.edisax.unedifact.handlers.UNHHandler.process (UNHHandler.java:97) по адресу org.milyn.edisax.unedif act.handlers.UNGHandler.process (UNGHandler.java:58) на org.milyn.edisax.unedifact.handlers.UNBHandler.process (UNBHandler.java:75) на org.milyn.edisax.unedifact.UNEdifactInterchangeParser. синтаксический анализ (UNEdifactInterchangeParser.java:113) на org.milyn.smooks.edi.unedifact.UNEdifactReader.parse (UNEdifactReader.java:75) на org.milyn.delivery.sax.SAXParser.parse (SAXParser.java:76) в org.milyn.delivery.sax.SmooksSAXFilter.doFilter (SmooksSAXFilter.java:86) ... 7 более
Вот фрагмент кода:
D97AInterchangeFactory d97InterChangeFactory = (D97AInterchangeFactory)SmooksFactoryImpl.D97A_FACTORY.getInstance();
InputStream ediSource = new FileInputStream("C:\\EDIFACT_MSG.txt");
UNEdifactInterchange interchange = d97InterChangeFactory.fromUNEdifact(ediSource);
if(interchange instanceof UNEdifactInterchange41){
List<UNEdifactMessage41> messages = ((UNEdifactInterchange41) interchange).getMessages();
for(UNEdifactMessage41 msg:messages){
System.out.println(msg.toString());
}
}
EDIMessage:
UNA: +.? UNB + UNOC: 3 + 662424795TEST: 16 + IBMEDIID: ZZ + 160330: 1416 + IG-62779496 UNG + ORDRSP + 662424795TEST: 16 + IBMEDIID: ZZ + 160330: 1420 + FG-34160863 + UN + D: 97A UNH + 80534414 + ORDRSP: D: 97A: UN BGM + 231 + 20160330 + 4 DTM + 69: 20150501150000UTC? +12: 304 FTX + SSR +++: пустая FTX + AAR ++ ST FTX + COI +++ CLW FTX + PRI ++ 8 FTX + DEL ++ 06 FTX + CUR +++ Упаковать все предметы в один box FTX + DIN +++ позвонить клиенту до доставки FTX + PRD +++ 1: 1: PC01 FTX + AAP +++ 900: accept RFF + PC: 20AMS67000 RFF + SE: PC01K33E RFF + SZ: ND RFF + ABO: Y RFF + CO: IBM1234501 DTM + 4: 20150501010101UTC?+12: 304 RFF + ACW: CASE_12345 RFF + ADG: Y RFF + ACH: Y RFF + ZOD: order_desk01 RFF + ZSD: IBM RFF + ZPD: 30006672 RFF + ZCS: Пусто RFF + ZZZ NAD + SE + 300IBM NAD + BY + US00000001 ++ Coca Cola: CA + 9/F: 841 WEBSTER ST: стресс 3: Бланк + SAN FRANCISCO ++ 94117 + US CTA + PD +: Иордания Surzyn [email protected]: EM COM + 6508624654: TE NAD + OY + US00000001 ++ IBM Полевая служба: CA + 9/F: 900 WEBSTER ST: напряжение 3: пустое + SAN FRANCISCO ++ 94117 + US CTA + CR +: Will Smith COM + Will @ ibm.com: EM COM + 6508624654: TE LIN + 10 PIA + 5 + 04X6076 IMD + F ++ ::: КЛАВИАТУРА NetVista Клавиатура (USB) QTY + 21: 1: EA DTM + 69: 20160610120000UTC? +12: 304 FTX + OSI +++ INW FTX + LIN +++ ZSP1 FTX + AAP +++ 900: принять FTX + ZCT +++ STO от DC к FSL RFF + ZSB: 01 RFF + ZRO: Y RFF + ZOR: КЛАВИАТУРА в хорошем состоянии состояние RFF + ЗСТ: SOFT UNS + S ЕНТ + 50 + 80534414 UNE + 1 + FG-34160863 UNZ + 1 + IG-62779496
Может кто-нибудь наставит меня, где я делаю неправильно? благодарит заранее.
Да, терминатор сегмента EDIFACT по умолчанию - это символ, здесь, как указано в сегменте UNA. – MikeRalphson