2017-04-12 59 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");