2016-09-13 10 views
1

Я пытаюсь прочитать сообщение 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

Может кто-нибудь наставит меня, где я делаю неправильно? благодарит заранее.

ответ

0

Это было из-за неправильного формата сообщения EDIFACT. Он разрешен после того, как я получил правильное сообщение EDIFACT, как показано ниже. Надеюсь, что кто-нибудь столкнулся с подобной проблемой, может это помочь. --thanks

UNA: +.? ' UNB + UNOC: 3 + IBM: ZZZ + 662424795TEST: 16 + 160330: 1416 + 00000016086706 ++++ 1' UNG + ORDRSP + IBM: ZZZ + 662424795TEST: 16 + 160330: 1420 + 00000000160867 + UN + D: 97A ' UNH + 1 + ORDRSP: D: 97A: UN' BGM + 231 + 20160330 + 4 ' DTM + 69: 20160501150000UTC? +12: 304' FTX + AAR ++ ER 'FTX + SSR +++ N: AM ' FTX + COI +++ CLW' FTX + PRI ++ 8 'FTX + DEL ++ 04' FTX + CUR +++ Упаковать все предметы в один ящик 'FTX + DIN +++ позвоните клиенту перед доставкой ' FTX + PRD +++ IBMDECK001 :: PC01' FTX + AAP +++ 900: accept 'RFF + PC: 20AMS67000' RFF + SE: PC01K33E 'RFF + SZ: ND' RFF + ABO: N ' RFF + CO: IBM1234501 ' RFF + ACW: IBMCASE12301' DTM + 4: 20150501000000UTC? +12: 304 ' NAD + SE + 30006672 ++ 3100001' NAD + BY + US00000001 ++ CA: NEC Personal Computers, Ltd. + 9/F: 841 МЫ BSTER ST: стресс 3 + SAN FRANCISCO ++ 941171717 + US 'CTA + PD +: Jordan Surzyn' COM [email protected]: EM ' COM + 6508624654: TE' NAD + OY + US00000001 ++ CA: NEC Personal Компьютеры, ООО + 9/F: 841 WEBSTER ST: стресс 3 + SAN FRANCISCO ++ 941171717 + US ' CTA + CR +: Jordan Surzyn' [email protected]: EM 'COM + 6508624654: TE' LIN + 20 +++ 1:10 'PIA + 5 + 04X6076' IMD + F ++ ::: КЛАВИАТУРА Клавиатура NetVista (USB) 'QTY + 21: 1: EA' DTM + 69: 20160610120000UTC? +12: 304 'FTX + LIN +++ ZSP1 ' FTX + AAP +++ 900: Accpet' FTX + OSI +++ INW 'FTX + BSC+++ KEYBOARD в хорошем состоянии условие' RFF + SE: Y 'NAD + OY + 01 + SOFT 'UNS + S' UNT + 41 + 1 ' UNE + 1 + 00000000160867' UNZ + 1 + 00000016086706 '

+1

Да, терминатор сегмента EDIFACT по умолчанию - это символ, здесь, как указано в сегменте UNA. – MikeRalphson