2017-08-01 140 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标准,该部分控制是强制性的。

相关问题