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");
我正在使用 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");