2012-06-18 12 views
5

Czy jest jakiś dobry parser X12 w Javie, który może przetwarzać specyfikację Walmart 810?Czy jest jakiś dobry parser X12 w Javie?

przykład EDI:

ISA*00*   *00*   *16*102096559TEST *14*PARTNERTEST *071214*1406*U*00040*810000263*1*T*> 
    GS*IN*102096559TEST*PARTNER*20071214*1406*810000263*X*004010 
    ST*810*0001 
     BIG*20050205*6463367*20050202*3376103367 
     REF*IA*123456170*X5T 
     REF*DP*00017 
     REF*MR*0020 
     N1*SU*SUPPLIER NAME 
     N1*ST*WAL-MART 100*UL*0078742000992 
     N3*406 SOUTH WALTON BLVD 
     N4*BENTONVILLE*AR*72712 
     ITD*05*15*****45 
     DTM*011*20050205 
     FOB*CC 
     IT1**1080*EA*3.61**IN*001719653*UP*022108955228*UK*   00221089552284  
     PID*F****ITEM DESCRIPTION 
     SAC*A*I410***2350*******02 
     TDS*387530 
     CAD*T***RDWT*ROADWAY**BM*123456789 
     ISS*1080*EA*100*LB 
     CTT*1 
    SE*19*0001 
    GE*1*810000263 
IEA*1*810000263 
+0

Twoje pytanie dotyczy EDIFACT, ale Twój przykład nie jest EDIFACT - jest to ANSI X12. Spójrz na BOTS na SourceForge. Lub przyjrzyj się komercyjnemu produktowi tłumaczącemu. Czy nie wysyłasz 810 do Walmart? Wydaje mi się, że jesteś GENERATING X12 (chyba że pracujesz dla Walmart lub agencji "czynnikowej" i dostajesz węgiel skopiowany na dane), a nie parsujesz. Parsujesz powrót 997. – Andrew

+0

@ Andrew masz rację. To jest ANSI X12, a nie EDIFACT – Chandana

+0

Zaimplementowałem EDI do XML za pomocą java. Zobacz tutaj: [wprowadź opis linku tutaj] (http://stackoverflow.com/questions/2794262/is-there-any-good-open-source-edifact-parser-in-java) –

Odpowiedz

3

Spróbuj użyć Smooks. Od strony:

Smooks jest rozszerzalny ramy dla tworzenia aplikacji dla XML przetwarzania i braku XML danych (CSV, EDI, Java, itp) za pomocą Java.

+1

Użyłem go również i było całkiem solidne. Znalazłem trochę brakującą dokumentację, ale to było lata temu. To mogło się zmienić. – palto

+0

czy możliwe jest przetwarzanie elementów typu "REF * IA * 123456170 * X5T REF * DP * 00017' w Smooks? – Chandana

+0

Smooks nie obsługuje X12, a projekt wydaje się być martwy (ostatnia zmiana repozytorium Git pochodzi z 2011 roku). – Torben

6

Spróbuj tego, edireader

Parser rozróżnia ANSI X.12 i EDIFACT standardów EDI przez inspekcję i wykorzystuje wzór fabryki do skonstruowania odpowiedniej podklasy parsera.

Analizator składni może być osadzony w aplikacji Java w taki sam sposób, jak analizator składni XML, dzięki czemu unika się interfejsów opartych na plikach i własnościach, często używanych z tradycyjnymi translatorami EDI.

+0

Otrzymuję 'Zwracalny wyjątek składni: com.berryworks.edireader.error.TransactionCountException - Błąd liczenia transakcji w segmencie GE. Oczekiwano 1 zamiast 164 w segmencie 317, błąd pola 2' podczas przetwarzania EDI – Chandana

0

Jeśli jesteś otwarty na produkt komercyjny, spójrz na numer Oakland Data Transformer. Jest napisany w Javie, ma projektanta opartego na Eclipse i Java API lub integrację z Apache Camel, Mule ESB i OSGi Blueprint. Możesz łatwo graficznie odwzorować go na XML, bazę danych, obiekty Java lub inne rzeczy.

Po pobraniu będziesz musiał skontaktować się z Oakland Software, aby uzyskać specyfikacje X12 4010 810, którego używasz.

+0

Czy jest to open source? – RCS

0

możesz wypróbować boty: http://bots.sourceforge.net to nie java, ale pyton. to nie jest "biblioteka", ale aplikacja. obsługuje x12 OK, włącznie 810. można przełożyć je do formatu trzeba (XML, CSV, płaski plików)

0

Możemy użyć apache wielbłąd, wielbłąd jest bardzo łatwe i rozszerzalny rozwiązanie tego,

Da to obiektom json, po czym możemy parsować obiekty json, a następnie uzyskać wartości.

XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat(); 
     xmlJsonFormat.setEncoding("UTF-8"); 
     xmlJsonFormat.setForceTopLevelObject(true); 
     xmlJsonFormat.setTrimSpaces(true); 
     xmlJsonFormat.setRootName("newRoot"); 
     xmlJsonFormat.setSkipNamespaces(true); 
     xmlJsonFormat.setRemoveNamespacePrefixes(true); 
    // xmlJsonFormat.setExpandableProperties(Arrays.asList("d", "e")); 

      from("file:sftpdata/x12files") 
      .log("Before unmarshal with SmooksDataFormat:").log("${body}") 
      .unmarshal(new SmooksDataFormat("smooks-config1.xml")) 
      .log("After unmarshal with SmooksDataFormat:").log("${body}") 
      .marshal(xmlJsonFormat) 
      .log("After marshalling with Json library:").log("${body}") 
      .process(new X12Processor()).log("X12 file processed") 
      .to("mock:result"); 
+0

DLACZEGO używałbyś json, kiedy mógłbyś unmarshall bezpośrednio w POJO? Dlaczego nie użyć bezpośrednio po JAXB zamiast konwertować wynik JAXB na obiekt Json, a następnie przekonwertować go z powrotem na POJO ??? Długość ludzi, którzy unikają używania po prostu JAXB, jest kłopotliwa. –

Powiązane problemy