1

我在调用时将消息正文解组为 pojo 非常糟糕。

我定义了一条非常简单的路线,将主体解组到我的自定义 pojo 中:

    <dataFormats>
        <json id="json" library="Jackson" unmarshalTypeName="com.trumin.domain.model.result.Result" />
    </dataFormats>


    <camel:route>
        <camel:from
            uri="activemq:topic:result?clientId=sswric_01&amp;durableSubscriptionName=sendSMSWhenResultIsCalculated" />
        <marshal ref="json" />
        <bean beanType="com.trumin.communications.sms.TimeResultSMSSender"
            method="sendTextToUserAfterTimeResultBeingSaved(${body})" />
    </camel:route>
</camelContext>

我在这里尝试调用的方法:

sendTextToUserAfterTimeResultBeingSaved(Result r);

接收以 json 数据格式定义的 Result 类型的参数,并且在传递消息时不会调用它。

如果我修改方法签名以接受字符串而不是结果:

sendTextToUserAfterTimeResultBeingSaved(String s);

然后它被调用并且字符串包含结果 json 表示。

有什么方法可以让我尝试实现的目标吗?

我还尝试从路由中删除 (${body}) 规范,我尝试过其他解组库,我尝试阅读所有骆驼教程和参数绑定链接,我已经阅读了大部分骆驼关于这个的行动章节,但仍然找不到我的答案。

4

1 回答 1

0

最后......这修复了它:

<camelContext xmlns="http://camel.apache.org/schema/spring">

    <camel:dataFormats>
        <camel:json id="jsonToResult" library="Jackson" unmarshalTypeName="com.trumin.domain.model.result.Result" />
    </camel:dataFormats>


    <camel:route>
        <camel:from
            uri="activemq:topic:result?clientId=sswric_01&amp;durableSubscriptionName=sendSMSWhenResultIsCalculated" />
        <camel:unmarshal ref="jsonToResult" />
        <camel:bean beanType="com.trumin.communications.sms.TimeResultSMSSender"
            method="sendTextToUserAfterTimeResultBeingSaved" />
    </camel:route>
</camelContext>
于 2016-02-02T16:24:07.440 回答