Java中有没有好的X12解析器? [关闭]

Posted

技术标签:

【中文标题】Java中有没有好的X12解析器? [关闭]【英文标题】:Is there any good X12 parser in Java? [closed] 【发布时间】:2012-06-20 03:13:39 【问题描述】:

Java 中有没有好的 X12 解析器可以处理 Walmart 810 规范?

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

【问题讨论】:

您的问题是关于 EDIFACT,但您的示例不是 EDIFACT - 它是 ANSI X12。查看 SourceForge 上的 BOTS。或者看看商业翻译产品。你不是把810送到沃尔玛吗?在我看来,您正在生成 X12(除非您为沃尔玛或“因素”机构工作并且正在对数据进行复制),而不是解析。您将解析返回的 997。 @安德鲁你是对的。这是 ANSI X12,不是 EDIFACT 我已经使用 java 实现了 EDI 到 XML。参考这里:enter link description here 查看这里:enter link description here***.com/questions/2794262/… 【参考方案1】:

我们可以使用 apache camel,camel 是非常简单且可扩展的解决方案,

这将给出一个 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");

【讨论】:

当您可以直接解组到 POJO 时,为什么还要使用 json?为什么不直接使用 JAXB pojo 而不是将 JAXB 结果转换为 json 对象,然后再将其转换回 POJO ???人们避免简单地使用 JAXB 的长度令人费解。【参考方案2】:

你可以试试机器人:http://bots.sourceforge.net 它不是java,而是python。 它不是一个“图书馆”,而是一个应用程序。 处理 x12 OK,包括 810。 您可以将其翻译成您需要的格式(xml、csv、平面文件)

【讨论】:

【参考方案3】:

如果您对商业产品持开放态度,请查看Oakland Data Transformer。它是用 Java 编写的,有一个基于 Eclipse 的设计器,以及一个 Java API 或与 Apache Camel、Mule ESB 和 OSGi 蓝图的集成。您可以轻松地将其以图形方式映射到 XML、数据库、Java 对象或其他东西。

下载时您需要联系 Oakland Software 以获取您正在使用的 X12 4010 810 的规格。

【讨论】:

【参考方案4】:

试试这个,edireader

解析器通过检查区分 ANSI X.12 和 EDIFACT EDI 标准,并使用工厂模式构造适当的解析器子类。

解析器可以像 XML 解析器一样嵌入到 Java 应用程序中,避免了传统 EDI 翻译器经常使用的基于文件的专有接口。

【讨论】:

处理 EDI 时出现Recoverable syntax exception: com.berryworks.edireader.error.TransactionCountException - Transaction count error in GE segment. Expected 1 instead of 164 at segment 317, field 2 错误【参考方案5】:

尝试使用Smooks。从页面:

Smooks 是一个可扩展的框架,用于构建处理 XML 和非 XML 的应用程序 使用 Java 的数据(CSV、EDI、Java 等)。

【讨论】:

我也用过它,它非常可靠。我发现文档有点缺乏,但那是几年前的事了。它可能已经改变了。 是否可以在 Smooks 中处理 REF*IA*123456170*X5T REF*DP*00017 之类的元素? Smooks 不支持 X12 并且该项目似乎已经死了(Git repo 的最后一次更改是从 2011 年开始)。

以上是关于Java中有没有好的X12解析器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java 中是不是有比 Xalan/Xerces 更快的 XML 解析器 [关闭]

通用 Web 解析器 [关闭]

Python中的RSS提要解析器库[关闭]

JavaScript的XML解析器[关闭]

Python中的JavaScript解析器[关闭]

java中的xml dom解析器? [关闭]