camel-smooks在体内返回null

时间:2017-04-12 09:36:14

标签: apache-camel talend edi smooks

我正在使用talend-ESB并希望使用smooks&解析EDI消息到XML。我身体无效。代码如下所示。

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。* jars的修订版降低到1.4.0,并得到一个例外,即路由无法注册smooks组件。所以我继续使用1.7.0版本的org.milyn。* jars。

1 个答案:

答案 0 :(得分:0)

为了其他可能遇到类似问题的人的利益,我'假设'smooks的输出被写入StringResult.class类型的Object中。但是,在我的初始实现中,没有这样的选项,因此输出主体为空。

后来,我尝试了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");