【问题标题】:camel-smooks returns null in bodycamel-smooks 在正文中返回 null
【发布时间】:2017-09-08 00:18:21
【问题描述】:

我正在使用 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 路线如下所示。

我使用了以下一组外部依赖项。 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

另外,我看到一个奇怪的行为,在执行时,我仍然看到在 cJavaDSLProcessor 之前“开始”,这最初让我怀疑它是否被执行。但后来,当我故意在 EDI-Mapping 中出错时,路由抛出错误,这让我确信它确实解析了 EDI 消息。

我在发这个问题之前也搜索过,在这个link发现了一个类似的问题

我尝试将我的 org.milyn.* jar 版本降低到 1.4.0,并得到一个异常,即路由无法注册 smooks 组件。所以我继续使用 1.7.0 版本的 org.milyn.* jars。

【问题讨论】:

    标签: apache-camel talend edi smooks


    【解决方案1】:

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

    后来,我尝试了http://smooks.org/guide 的替代方法,他们使用了处理器端点。实际上,他们甚至声明可以通过导出元素检索数据。下面的代码 sn-p 帮助解决了问题。

    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");
    

    【讨论】:

    • 虽然这回答了问题,但使用 SmooksProcessor 的一个缺点是标头在交换中丢失并设置为 null。
    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多