2017-08-01 10 views
0

EDI初心者です。そして私はsmooks apiを使ってORDERS ediファイルをXMLに変換しました。いくつかのORDERサンプルファイルは、次の例で正常に動作しています。しかし、次のediファイルを実行しているときに次の例外があります。これで悩んでいます。ここに私の例とEDIデータEDIセグメントの最小インスタンス数は1です。[UNS]

package example; 

import org.json.JSONObject; 
import org.json.XML; 
import org.milyn.Smooks; 
import org.milyn.SmooksException; 
import org.milyn.io.StreamUtils; 
import org.milyn.smooks.edi.unedifact.UNEdifactReaderConfigurator; 
import org.xml.sax.SAXException; 

import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.StringWriter; 

public class Main { 
public static int PRETTY_PRINT_INDENT_FACTOR = 4; 
protected static String runSmooksTransform() throws IOException, SAXException, SmooksException { 
    Smooks smooks = new Smooks(); 
    smooks.setReaderConfig(new UNEdifactReaderConfigurator("urn:org.milyn.edi.unedifact:d93a-mapping:*")); 
    try { 
     StringWriter writer = new StringWriter(); 

     smooks.filterSource(new StreamSource(new FileInputStream("EDI.edi")), new StreamResult(writer)); 

     return writer.toString(); 
    } finally { 
     smooks.close(); 
    } 
} 

public static void main(String[] args) throws IOException, SAXException, SmooksException { 

    System.out.println("\n\n==============Message In=============="); 
    System.out.println(readInputMessage()); 
    System.out.println("======================================\n"); 

    String messageOut = Main.runSmooksTransform(); 

    System.out.println("==============Message Out============="); 
    System.out.println(messageOut); 
    System.out.println("======================================\n\n"); 

    JSONObject xmlJSONObj = XML.toJSONObject(messageOut); 
    String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR); 
    System.out.println(jsonPrettyPrintString); 
} 

private static String readInputMessage() throws IOException { 
    return StreamUtils.readStreamAsString(new FileInputStream("EDI.edi")); 
} 
} 

とサンプルEDIデータ

Exception in thread "main" org.milyn.SmooksException: Failed to filter source. 
at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:97) 
at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:64) 
at org.milyn.Smooks._filter(Smooks.java:526) 
at org.milyn.Smooks.filterSource(Smooks.java:482) 
at org.milyn.Smooks.filterSource(Smooks.java:456) 
at example.Main.runSmooksTransform(Main.java:49) 
at example.Main.main(Main.java:63) 
Caused by: org.milyn.edisax.EDIParseException: EDI message processing failed [ORDERS][D:93A:UN]. Must be a minimum of 1 instances of segment [UNS]. Currently at segment number 9. 
at org.milyn.edisax.EDIParser.mapSegments(EDIParser.java:499) 
at org.milyn.edisax.EDIParser.mapSegments(EDIParser.java:450) 
at org.milyn.edisax.EDIParser.parse(EDIParser.java:426) 
at org.milyn.edisax.EDIParser.parse(EDIParser.java:410) 
at org.milyn.edisax.unedifact.handlers.UNHHandler.process(UNHHandler.java:97) 
at org.milyn.edisax.unedifact.handlers.UNBHandler.process(UNBHandler.java:75) 
at org.milyn.edisax.unedifact.UNEdifactInterchangeParser.parse(UNEdifactInterchangeParser.java:113) 
at org.milyn.smooks.edi.unedifact.UNEdifactReader.parse(UNEdifactReader.java:75) 
at org.milyn.delivery.sax.SAXParser.parse(SAXParser.java:76) 
at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:86) 
... 6 more 
+1

smooksがあなたのデータにないUNSセグメントを探しているようです。セクションコントロールは、D.93A標準に従って必須です。あなたがあなたのEDIファイルを投稿しなかったので、それが本当であるかどうかは分かりません.EDIドキュメントには他の問題があるかもしれません。 – Andrew

+0

アンドリュー。あなたは正しかった。 EDIファイルには標準コードが不明です。だから私は例外がある。今は未知のコードを削除した後にうまくいきます。 –

答えて

1

悪いソースデータがこれを引き起こしますと例外があります。

smooksがあなたのデータにないUNSセグメントを探しているようです。セクションコントロールは、D.93A標準に従って必須です。

関連する問題