2012-06-18 37 views
5

在Java中有沒有可以處理沃爾瑪810規範的好X12解析器?Java中有沒有好的X12解析器?

EDI例如:使用Smooks

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

您的問題詢問EDIFACT,但您的示例不是EDIFACT - 它是ANSI X12。看看SourceForge上的BOTS。或者看一下商業翻譯產品。你不是把810送到沃爾瑪嗎?在我看來,您正在生成X12(除非您爲沃爾瑪或「因素」機構工作,並且正在將數據複製到碳上),而不是解析。你會解析997回來。 – Andrew

+0

@安德魯你是對的。這是ANSI X12,而不是EDIFACT – Chandana

+0

我已經使用java實現了EDI到XML。 請參考這裏:[請輸入鏈接描述](http://stackoverflow.com/questions/2794262/is-there-any-good-open-source-edifact-parser-in-java) –

回答

3

嘗試。從頁面:

的Smooks是用於處理XML和XML非數據 構建應用程序使用Java的可擴展框架(CSV,EDI,爪哇等)。

+1

我也使用它,它非常穩固。我發現文檔有點缺乏,但那是幾年前。它可能已經改變。 – palto

+0

是否可以像處理Smooks中的元素一樣處理'REF * IA * 123456170 * X5T REF * DP * 00017'? – Chandana

+0

Smooks不支持X12並且該項目似乎已經死亡(對Git回購的最後一次更改是從2011年開始的)。 – Torben

6

嘗試此,edireader

解析器通過檢查ANSI X.12和EDIFACT EDI標準區分,並使用一個工廠模式來構建一個適當的語法分析器的子類。

解析器可以像使用XML解析器一樣嵌入到Java應用程序中,避免常規EDI翻譯器常用的基於文件和專有接口。

+0

我得到'可恢復的語法異常:com.berryworks.edireader.error.TransactionCountException - GE段中的事務計數錯誤。期望1而不是在段317處的164,字段2處理EDI時出現錯誤 – Chandana

0

如果您打開商業產品,請查看Oakland Data Transformer。它是用Java編寫的,有一個基於Eclipse的設計器,一個Java API或與Apache Camel,Mule ESB和OSGi Blueprint的集成。您可以輕鬆地將其映射到XML,數據庫,Java對象或其他東西。

當您下載它時,您將需要聯繫奧克蘭軟件以獲取您正在使用的X12 4010 810的規格。

+0

它是開源的嗎? – RCS

0

你可以嘗試機器人:http://bots.sourceforge.net 它不是java,但python。 它不是一個'圖書館',而是一個應用程序。 處理X12 OK,含810 你可以把它翻譯成你需要的格式(XML,CSV,平面文件)

0

我們可以使用Apache的駱駝,駱駝是很容易的,這個擴展的解決方案,

這會給一個json對象,因爲我們可以解析json對象然後獲取值。

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

爲什麼在使用json的時候可以直接解開POJO?爲什麼不直接使用JAXB pojo而不是將JAXB結果轉換爲json對象,然後將其轉換回POJO?人們爲避免簡單使用JAXB而使用的長度令人困惑。 –