2012-06-18 36 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而使用的长度令人困惑。 –