Javaに優れたオープンソースエディファクトパーサーはありますか? [閉まっている
質問
エディファクトを解析することは、気が遠くなる可能性があります。役立つ優れたオープンソースライブラリはありますか?
解決
www.smooks.org - テンプレートベースのテキストパーサー。彼らは私が私の製品を捨てる前にウォルマート810の実装に使用しようとしていた適切なEDI例を持っています。
他のヒント
試す: http://bots.sourceforge.netライブラリではありませんが、edifactを好みの形式に翻訳します.... xml .... csv .... etc
エディファクトを解析するのは簡単です。多くのライブラリを見つけることができます。例えば、
http://code.google.com/p/edicoder/
これらのライブラリはすべて、メッセージをセグメントに分割するだけです。
edifactの難しい部分は、メッセージをいくつかの意味のあるオブジェクトに変換することです。これは非常にアプリケーション固有のものであり、ライブラリが見つかるとは思わない。たとえあなたが見つけたとしても、それはホテルの予約のような狭いフィールドに固有のものになります。
Java + Smooks 1.6を使用して、834 EDIにXMLに実装しました。それは素晴らしいです!
<?xml version="1.0" encoding="UTF-8"?>
<medi:description name="834 EDI TO XML" version="1.0" />
<medi:delimiters segment=" " field="*" component="^"
sub-component="#" escape="~"/>
<medi:segments xmltag="FILE">
<medi:segment segcode="ISA" xmltag="ISAHeader">
<medi:field xmltag="AuthorziationInformationQualifier" />
<medi:field xmltag="AuthorziationInformation" />
<medi:field xmltag="SecurityInformationQualifier" />
<medi:field xmltag="InterchangeIDQualifier" />
<medi:field xmltag="InterchangeSenderID" />
<medi:field xmltag="InterchangeIDQualifier" />
<medi:field xmltag="InterchangeReceiverID" />
<medi:field xmltag="InterchangeDate" />
<medi:field xmltag="InterchangeTime" />
<medi:field xmltag="RepetitionSeparator" />
<medi:field xmltag="InterchangeControlVersionNumber" />
<medi:field xmltag="InterchangeControlNumber" />
<medi:field xmltag="AcknowledgmentRequested" />
<medi:field xmltag="InterchangeUsageIndicator" />
<medi:field xmltag="ComponentElementSeparator" />
</medi:segment>
<medi:segmentGroup xmltag="BenefitEnrollmentRequest" maxOccurs="-1">
<medi:segment minOccurs="0" maxOccurs="-1" segcode="GS" xmltag="BenefitEnrollmentRequestHeader">
<medi:field xmltag="FunctionalIDCode" />
<medi:field xmltag="ApplicationSendsCode" />
<medi:field xmltag="ApplicationRecsCode" />
<medi:field xmltag="Date" />
<medi:field xmltag="Time" />
<medi:field xmltag="GroupCtrlNumber" />
<medi:field xmltag="ResponsibleAgencyCode" />
<medi:field xmltag="ReleaseIDCode" />
</medi:segment>
<medi:segmentGroup xmltag="BenefitEnrollmentMaintenance" maxOccurs="-1">
<medi:segment minOccurs="0" maxOccurs="-1" segcode="ST" xmltag="BenefitEnrollmentMaintenanceHeader">
<medi:field xmltag="TransactionSetIdentifierCode" />
<medi:field xmltag="TransactionSetControlNumber" />
<medi:field xmltag="ImplementationConventionReference" />
</medi:segment>
<medi:segment minOccurs="0" segcode="BGN" xmltag="Begin" ignoreUnmappedFields="true">
<medi:field xmltag="TSPurposeCode" />
<medi:field xmltag="ReferenceIdent" />
<medi:field xmltag="Date" />
<medi:field xmltag="Time" />
<medi:field xmltag="TimeCode" />
<medi:field xmltag="ReferenceIdent" />
<medi:field xmltag="TransactionTypeCode" />
<medi:field xmltag="ActionCode" />
</medi:segment>
<medi:segment minOccurs="0" segcode="REF" xmltag="Ref_38" ignoreUnmappedFields="true">
<medi:field xmltag="ReferenceIdentQual" />
<medi:field xmltag="ReferenceIdent" />
</medi:segment>
<medi:segment minOccurs="0" segcode="DTP" xmltag="Dtp_007" ignoreUnmappedFields="true">
<medi:field xmltag="DateTimeQualifier" />
<medi:field xmltag="DateTimePeriodFormatQualifier" />
<medi:field xmltag="DateTimePeriod" />
</medi:segment>
<medi:segment minOccurs="0" segcode="QTY" xmltag="To" ignoreUnmappedFields="true">
<medi:field xmltag="QuantityQualifier" />
<medi:field xmltag="Quantity" />
</medi:segment>
<medi:segment minOccurs="0" segcode="N1" xmltag="Sponsor" ignoreUnmappedFields="true">
<medi:field xmltag="EntityIDCode" />
<medi:field xmltag="Name" />
<medi:field xmltag="IDCodeQualifier" />
<medi:field xmltag="IDCode" />
</medi:segment>
<medi:segment minOccurs="0" segcode="N1" xmltag="Issuer" ignoreUnmappedFields="true">
<medi:field xmltag="EntityIDCode" />
<medi:field xmltag="Name" />
<medi:field xmltag="IDCodeQualifier" />
<medi:field xmltag="IDCode" />
</medi:segment>
<medi:segment minOccurs="0" segcode="N1" xmltag="Agent" ignoreUnmappedFields="true">
<medi:field xmltag="EntityIDCode" />
<medi:field xmltag="Name" />
<medi:field xmltag="IDCodeQualifier" />
<medi:field xmltag="IDCode" />
<medi:segment minOccurs="0" segcode="ACT" xmltag="Act" ignoreUnmappedFields="true">
<medi:field xmltag="AccountNumber" />
<medi:field xmltag="Name" />
<medi:field xmltag="IDCodeQualifier" />
<medi:field xmltag="IDCode" />
<medi:field xmltag="AcctNumberQualifier" />
<medi:field xmltag="AccountNumber" />
</medi:segment>
</medi:segment>
<medi:segment minOccurs="0" segcode="N1" xmltag="Broker" ignoreUnmappedFields="true">
<medi:field xmltag="EntityIDCode" />
<medi:field xmltag="Name" />
<medi:field xmltag="IDCodeQualifier" />
<medi:field xmltag="IDCode" />
<medi:segment minOccurs="0" segcode="ACT" xmltag="Act" ignoreUnmappedFields="true">
<medi:field xmltag="AccountNumber" />
<medi:field xmltag="Name" />
<medi:field xmltag="IDCodeQualifier" />
<medi:field xmltag="IDCode" />
<medi:field xmltag="AcctNumberQualifier" />
<medi:field xmltag="AccountNumber" />
</medi:segment>
</medi:segment>
<!--
<medi:segment minOccurs="0" segcode="N1" xmltag="Sponsor">
<medi:field xmltag="Name" />
</medi:segment>
<medi:segmentGroup xmltag="Member" maxOccurs="-1">
<medi:segment minOccurs="0" maxOccurs="-1" segcode="INS" xmltag="MemberHeader">
<medi:field xmltag="HeaderName" />
</medi:segment>
<medi:segment minOccurs="0" segcode="DTP" xmltag="DOB">
<medi:field xmltag="Month" />
</medi:segment>
<medi:segment minOccurs="0" maxOccurs="-1" segcode="LE" xmltag="MemberFooter" ignoreUnmappedFields="true">
<medi:field xmltag="FooterName"/>
</medi:segment>
</medi:segmentGroup>-->
<medi:segment minOccurs="0" segcode="SE" xmltag="BenefitEnrollmentMaintenanceFooter">
<medi:field xmltag="TransactionSetIdentifierCode" />
<medi:field xmltag="TransactionSetControlNumber" />
</medi:segment>
</medi:segmentGroup>
<medi:segment minOccurs="0" segcode="GE" xmltag="BenefitEnrollmentRequestFooter">
<medi:field xmltag="ZFA" />
</medi:segment>
</medi:segmentGroup>
<medi:segment segcode="IEA" xmltag="ISAFooter">
<medi:field xmltag="CCC" />
</medi:segment>
</medi:segments>
に良いものがあります http://x12parser.codeplex.com。検査を容易にするために、XML、HTML、またはWhitespaceを使用してテキストに戻る810を出力します。ユニットテストには、サイトからのウォルマート810のサンプルが含まれています。 http://www.jobisez.com/edi/tp/guide.aspx?doc=/edigs/walmart/810invoice5010.pdf.
フォーマットされたテキストは次のようになります。
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
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