当前位置: 首页 > 知识库问答 >
问题:

骆驼将Json解组为bean方法上的参数

楚俊逸
2023-03-14

我在调用时将消息正文解组为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}) 规范,我尝试过其他非编组库,我尝试阅读所有 Camel 教程和参数绑定链接,我已经阅读了大多数关于此的 Camel 在行动章节,但仍然找不到我的答案。

共有1个答案

松茂实
2023-03-14

最后...这修复了它:

<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>
 类似资料:
  • 我的测试处理器: 所以我有下一种情况:1)骆驼成功地从“test-camel-start”队列读取消息2)基处理器成功地处理消息3)在重试将消息传递到“test-camel-success”时失败 我收到了下一个日志跟踪: Log说“请求必须包含参数MessageBody”。 我不知道为什么这个消息体没有出现。

  • 我有一个bean,它有一个构造对象列表的方法。我想从POJO的这个列表中生成一个json和jackson。 然后在我的骆驼路线中,我想从我的bean方法生成json。这里我做了什么,似乎不起作用 camel返回一个UUID不带扩展名且内容为NULL的文件。伙计们,我错过了什么!?

  • 我目前正在尝试熟悉Servicemix、Camel、CXF等,我的问题与四年前的一些人基本相同:如何将Camel中的BeaninJournal对象转换为消息正文和标题?不幸的是,答案对我帮助不大。正如其中一个答案所提到的:Camel网站上的所有示例都与从CXF向bean发送内容有关。 我在POJO中使用了一个bean代理endpoint,通过 当我在另一端使用另一个beanendpoint,为该接

  • 我将我的Fabric8 Spring Boot Camel pom.xml升级到使用Camel 2.16.0,但并非所有组件都在2.16.0中可用 我不得不将以下组件保留在2.15.3,因为我得到了2.16.0版本的“丢失项目”: 骆驼指标 骆驼jsonpath 骆驼Spring靴 这些在Camel 2.16.0中不可用吗? 我使用的是Fabric8版本2.2.46和Spring Boot版本1.

  • 我知道有一些方法可以捆绑应用程序并将其部署在Tomcat或Jetty中。但是,如果我这样做了,最大的问题就变成了如何与Restlet集成。 我做了进一步的挖掘。我举了骆驼附带的一个tomcat例子。然后我试着让它具有RESTLET功能。差不多管用了。现在的问题是参数没有传递到路由。我希望当调用这个服务器:http://x.x.x.x.x:8080/rs/user/?name=Paul时,我会得到:

  • 我刚刚开始将Apache Camel用于集成项目。我正在使用将对象持久化到mysql,但mybatisendpoint无法通过以下Trace消息解析: 2016-07-19 15:50:15跟踪事件助手:800-通知者:org。阿帕奇。骆驼impl。DefaultRuntimeEndpointRegistry@5847e0b4未为事件启用:由于未能在以下位置创建路由route1,无法启动Camel