camel-smooks returns 体内为空

camel-smooks returns null in body

我正在使用 talend-ESB 并想使用 smooks 将 EDI 消息解析为 XML & 我在正文中得到 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 路线如下所示。

我使用了以下一组外部依赖项。 milyn-commons-1.7.0.jar milyn-smooks-camel-1.7.0.jar milyn-smooks-edi-1.7.0.jar milyn-smooks-core-1.7.0.jar jaxen-1.1.6.jar milyn-edisax-parser-1.4.jar

另外,我看到一个奇怪的行为,在执行时,我仍然看到 "starting" 在 cJavaDSLProcessor 之前,这最初让我想知道它是否被执行了。但是后来,当我故意在 EDI-Mapping 中犯了一个错误时,路由就会抛出错误,这让我确信它确实解析了 EDI 消息。

发这个问题之前我也搜索了一下,在这个link

中发现了类似的问题

并且我试图将 org.milyn.* jars 的修订版降低到 1.4.0,但出现了路由无法注册 smooks 组件的异常。所以我继续使用1.7.0版本的org.milyn.* jars.

为了其他可能遇到类似问题的人的利益,我 'assume' 将 smooks 的输出写入 StringResult.class 类型的对象中。但是,在我最初的实现中,没有这样的选项,因此输出正文为空。

后来,我尝试了 http://smooks.org/guide 的替代方法,他们使用处理器 endpoint.Actually 他们甚至声明可以通过 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");