2012-10-09 85 views

回答

0

按照Smooks website

的Smooks可以讀寫比XML,包括EDI,CSV,JSON,YAML,Java的其他數據格式。要讀取非XML數據,通常需要爲該數據類型配置一個。編寫數據通常涉及配置一個模板,該模板對由(如XSLT)生成的事件流或BeanContext中的Bean(如FreeMarker的情況)生成的事件流進行操作。您也可以簡單地允許Smooks序列化輸入讀取器生成的事件流,這將生成XML,只需爲輸入源配置讀取器即可爲XML轉換提供有效的NNN。

所以,是的,有可能與Smooks產生EDI。

+0

你能不能給一個例子,如何從java對象/ xml生成edi文件,因爲我是新來的smooks和缺乏文檔,我努力實現這一點。 – RCS

+0

@RCS看看這裏:http://www.smooks.org/user-guide/user-guide.html#EDI – Vlad

3

我能夠做到這一點使用的unedifact使用相同的模式:讀者

的Smooks-配置:

<?xml version="1.0"?> 
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" 
         xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd"> 
    <import file="/org/milyn/edi/unedifact/d96a/message-bindingconfig.xml" /> 
    <import file="/org/milyn/smooks/edi/unedifact/model/r41/bindings/unedifact-interchange.xml" /> 
    <core:exports> 
     <core:result type="org.milyn.payload.JavaResult"/> 
    </core:exports> 
</smooks-resource-list> 

結果是一個HashMap枝條readed的元素。現在,我已經OBJETS我可以做任何的修改之後,我使用文件交換工廠:前D96AInterchangeFactory

D96AInterchangeFactory factory = D96AInterchangeFactory.getInstance(); 
UNEdifactInterchange41 unEdifactInterchange = (UNEdifactInterchange41) map.get("unEdifactInterchange"); 
StringWriter ediOutStream = new StringWriter(); 
factory.toUNEdifact(unEdifactInterchange, ediOutStream); 

最後,我可以使用的toString(),以獲得我的文檔:

System.out.println("document: " + ediOutStream.toString()); 
+0

我試圖用你的解決方案輸出EDI,但ediOutStream是空的。我的Smooks配置就像你的(除了我導入D98a),所以問題可能是我的JavaResult填充的方式。 – morsor

+0

您可以調試您的路由以瞭解是否填充了JavaResult。我認爲,如果你使用不同的導入至少有這些變化:D96AInterchangeFactory,UNEdifactInterchange41 – Panchitoboy

+0

感謝您的答覆。我的完整代碼在這裏 - > http://stackoverflow.com/questions/31069450/smooks-outputting-edi-from-java我有一種感覺,我創建的示例Java對象沒有足夠的空間被識別爲EDI消息 – morsor