2017-04-12 89 views
0

我正在使用talend-ESB並希望使用smooks將EDI消息解析爲XML &我在正文中得到空值。代碼如下所示。camel-smooks在主體中返回null

from(
"file://D:/cimt/InvoiceEDI_Mapping/" + "?noop=true" 
    + "&autoCreate=true" + "&flatten=false" 
    + "&fileName=InDev_EDI_Msg.txt" + "&bufferSize=128") 
.routeId("TestSmooksConfig_cFile_1") 
.log(org.apache.camel.LoggingLevel.WARN, 
"TestSmooksConfig.cLog_1", "${body}") 

.id("TestSmooksConfig_cLog_1") 

.to("smooks://EDI_Config.xml") 
.to("log:TestSmooksConfig.cLog_2" + "?level=WARN") 

.id("TestSmooksConfig_cLog_2"); 
    } 

我的Talend路線如下圖所示。

enter image description here

我用下面的一組外部依賴性的。 milyn-公地1.7.0.jar milyn-的Smooks-駱駝1.7.0.jar milyn-的Smooks-EDI-1.7.0.jar milyn-的Smooks核-1.7.0.jar Jaxen的-1.1 .6.jar milyn-edisax解析器-1.4.jar

而且,我看到一個奇怪的行爲,在執行時,我仍然看到「啓動」之前cJavaDSLProcessor,最初讓我不知道,如果在所有它得到執行。但後來,當我故意在EDI-Mapping中犯了一個錯誤時,那麼這條路線發生了錯誤,這使我確信它解析了EDI信息。

我也搜索在這裏張貼了這個問題之前,並且發現這種link

一個類似的問題,我試圖降低我org.milyn的修訂。*的jar 1.4.0,並得到了一個異常該路線無法註冊smooks組件。所以我繼續使用1.7.0版本的org.milyn。* jar。

回答

0

爲了可能遇到類似問題的其他人的利益,我'假設'smooks的輸出被寫入StringResult.class類型的對象中。但是,在我最初的實施中,沒有這種選擇,因此輸出主體爲空。

後來,我嘗試了http://smooks.org/guide的替代方法,他們在那裏使用了處理器端點。事實上,他們甚至聲明可以通過exports元素檢索數據。下面的代碼片段有助於解決問題。

Smooks smooks = new Smooks("edi-to-xml-smooks-config.xml"); 
ExecutionContext context = smooks.createExecutionContext(); 
smooks.setExports(new Exports(StringResult.class)); 
SmooksProcessor processor = new SmooksProcessor(smooks, context); 
from("file://input?noop=true") 
.process(processor) 
.to("mock:result");