Java 骆驼序列化消息内容列表

Java 骆驼序列化消息内容列表,java,apache-camel,activemq,Java,Apache Camel,Activemq,我接收到一条到CXF端点的SOAP消息,该消息具有长字符串值。 例[5,“测试”] 接收消息的驼峰路由已使用dataformat=POJO 我需要将ActiveMQ上的这些参数发送到另一个应用程序 如果我使用: <convertBodyTo type="java.lang.String"/> 日志显示主体仅包含5个。”未发送“测试” 在转换成字符串之前,我尝试过转换成POJO,但我找不到制作类型转换器的适当文档(说真的,谁能从中读取并找出实际代码?) 例如 如果我

我接收到一条到CXF端点的SOAP消息,该消息具有长字符串值。 例[5,“测试”]

接收消息的驼峰路由已使用dataformat=POJO 我需要将ActiveMQ上的这些参数发送到另一个应用程序

如果我使用:

<convertBodyTo type="java.lang.String"/>     

日志显示主体仅包含5个。”未发送“测试”

在转换成字符串之前,我尝试过转换成POJO,但我找不到制作类型转换器的适当文档(说真的,谁能从中读取并找出实际代码?)

例如


如果我尝试只将CXF数据转发到队列而不进行任何转换,我会得到:

未能提取正文,原因是:javax.jms.JMSException:未能 从内容构建主体。可序列化类对代理不可用。 原因:java.lang.ClassNotFoundException:禁止类 org.apache.cxf.message.MessageContentsList!这门课是不允许的 要序列化。添加带有 'org.apache.activemq.SERIALIZABLE_PACKAGES'系统属性

有人知道这里最好的选择是什么吗


谢谢

在将参数发送到队列之前,您应该将参数封送为XML或JSON(或您喜欢的任何其他格式)。然后,消费者需要将其解组

不需要乱搞类型转换器。Camel的数据格式让这变得非常简单:

JSON:


JAXB:

在将参数发送到队列之前,您应该将参数封送为XML或JSON(或您喜欢的任何其他格式)。然后,消费者需要将其解组

不需要乱搞类型转换器。Camel的数据格式让这变得非常简单:

JSON:


JAXB:

创建了一个bean并发送到该bean:

public void process(Exchange exchange) throws Exception {
    log.info("Converting CXF values for queue.");
    Object[] args = exchange.getIn().getBody(Object[].class);
    patientKey = String.valueOf((Long)args[0]);
    destinationUrl = (String)args[1];
    exchange.getOut().setBody(new String(patientKey + "|" + destinationUrl));
}

制作一个bean并发送到该bean:

public void process(Exchange exchange) throws Exception {
    log.info("Converting CXF values for queue.");
    Object[] args = exchange.getIn().getBody(Object[].class);
    patientKey = String.valueOf((Long)args[0]);
    destinationUrl = (String)args[1];
    exchange.getOut().setBody(new String(patientKey + "|" + destinationUrl));
}

我相信你是对的,但我在核实上有困难。我不断得到奇怪的结果。如果我使用XStream封送,它会抱怨“无法创建数据格式‘XStream’。请确保数据格式有效,并且关联的Camel组件存在于类路径上”,尽管它位于类路径上,并且Fuse中已安装功能。如果我使用JAXB,它将发送一个字节[]。当我转换为字符串时,它包含“test”。现在它没有发送5。有些数据类型需要在spring或blueprint中注册才能使用,如果它们需要一些配置的话。我将创建一个具有
long
String
属性的POJO,从MCL填充它,然后封送POJO。如果您使用JAXB,AMQ组件足够聪明,可以自行进行编组。我使用自己的半驴解决方案成功地解决了这个问题。谢谢你的帮助。我会发布我的答案,然后给你一个投票。我只是无法以任何标准的方式让它工作。我相信你是对的,但我在验证时遇到了困难。我不断得到奇怪的结果。如果我使用XStream封送,它会抱怨“无法创建数据格式‘XStream’。请确保数据格式有效,并且关联的Camel组件存在于类路径上”,尽管它位于类路径上,并且Fuse中已安装功能。如果我使用JAXB,它将发送一个字节[]。当我转换为字符串时,它包含“test”。现在它没有发送5。有些数据类型需要在spring或blueprint中注册才能使用,如果它们需要一些配置的话。我将创建一个具有
long
String
属性的POJO,从MCL填充它,然后封送POJO。如果您使用JAXB,AMQ组件足够聪明,可以自行进行编组。我使用自己的半驴解决方案成功地解决了这个问题。谢谢你的帮助。我会发布我的答案,然后给你一个投票。我只是无法以任何标准方式让它工作。很酷,希望
patientKey
destinationUrl
永远不要包含管道字符!酷,只希望
patientKey
destinationUrl
永远不要包含管道字符!