Java 如何发送文本消息而不是字节消息

Java 如何发送文本消息而不是字节消息,java,spring-boot,apache-camel,spring-jms,Java,Spring Boot,Apache Camel,Spring Jms,我正在使用blueprint.xml构建一个骆驼路由,该路由与我的JMS队列通信。我一直遇到一些神秘的错误,我的spring boot应用程序充当队列的使用者,它将我的xml作为字节消息而不是文本消息发送,spring使用者对此感到窒息 以下是两条信息,文本一起作用: 2016-06-24 07:08:22,671 | INFO | Sending message: ActiveMQBytesMessage {commandId = 8, responseRequired = true, me

我正在使用blueprint.xml构建一个骆驼路由,该路由与我的JMS队列通信。我一直遇到一些神秘的错误,我的spring boot应用程序充当队列的使用者,它将我的xml作为字节消息而不是文本消息发送,spring使用者对此感到窒息

以下是两条信息,文本一起作用:

2016-06-24 07:08:22,671 | INFO  | Sending message: ActiveMQBytesMessage {commandId = 8, responseRequired = true, messageId = ID:ThomasLaptop-54711-1466766502054-1:1:2:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:ThomasLaptop-54711-1466766502054-1:1:2:1, destination = queue://tripRequest.updateStatus.v1.0, transactionId = null, expiration = 1466766522670, timestamp = 1466766502670, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = Camel-ID-ThomasLaptop-54704-1466766499471-0-3, replyTo = temp-queue://ID:ThomasLaptop-54711-1466766502054-1:1:1, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@149f0268, marshalledProperties = org.apache.activemq.util.ByteSequence@1421b3cd, dataStructure = null, redeliveryCounter = 0, size = 0, properties = {CamelFileLastModified=1466448102155, CamelFileParent=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data, CamelFilePath=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data\one.json, CamelFileNameConsumed=one.json, breadcrumbId=ID-ThomasLaptop-54704-1466766499471-0-1, CamelFileLength=22, CamelFileRelativePath=one.json, CamelFileAbsolute=true, CamelFileAbsolutePath=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data\one.json, CamelFileName=one.json, CamelFileNameOnly=one.json}, readOnlyProperties = false, readOnlyBody = false, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQBytesMessage{ bytesOut = null, dataOut = null, dataIn = null } | org.apache.activemq.broker.util.LoggingBrokerPlugin | ActiveMQ Transport: tcp:///127.0.0.1:54712@61616
2016-06-24 07:13:39,397 | INFO  | Sending message: ActiveMQTextMessage {commandId = 7, responseRequired = true, messageId = ID:ThomasLaptop-54826-1466766792576-1:4:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:ThomasLaptop-54826-1466766792576-1:4:1:1, destination = queue://tripRequest.getCancellationRequest.v1.0, transactionId = null, expiration = 1466766820394, timestamp = 1466766819394, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = temp-queue://ID:ThomasLaptop-54826-1466766792576-1:4:1, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@65f79dd4, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = false, readOnlyBody = false, droppable = false, jmsXGroupFirstForConsumer = false, text = <request><id>259</id></request>} | org.apache.activemq.broker.util.LoggingBrokerPlugin | ActiveMQ Transport: tcp:///127.0.0.1:54846@61616
我的骆驼路线:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
       http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <!-- 
    <property name="brokerURL" value="tcp://mq1.cloud.local:61616"/>
    <property name="userName" value="admin"/>
    <property name="password" value="xxxx"/>
     -->
    <property name="brokerURL" value="tcp://localhost:61616"/>
  </bean>

  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
  <endpoint uri="dozer:buildApproveTripRequest?sourceModel=one.One&amp;targetModel=generated.TripRequestUpdateStatus&amp;marshalId=generated&amp;unmarshalId=oneOne&amp;mappingFile=buildApproveTripRequest.xml" id="buildApproveTripRequest"/>
  <dataFormats>
    <json library="Jackson" unmarshalTypeName="one.One" id="oneOne"/>
    <jaxb contextPath="generated" id="generated"/>
  </dataFormats>
  <route id="buildApproveTripRequest">
    <from uri="file://C:\Users\Thom\git\brms-poc-esb\rule-cancel\data"/>
    <log message="Processing ${file:name}"/>
    <to ref="buildApproveTripRequest"/>
    <log message="Handling unmarshal ${body}"/>
    <to uri="activemq:queue:tripRequest.updateStatus.v1.0?exchangePattern=InOut"/>
    <log message="Update Status responded ${out.body}"/>
  </route>
</camelContext>

</blueprint>

这是变压器:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <configuration>
        <wildcard>false</wildcard>
    </configuration>
    <mapping>
        <class-a>one.One</class-a>
        <class-b>generated.TripRequestUpdateStatus</class-b>
        <field>
            <a>tripId</a>
            <b>id</b>
        </field>
    </mapping>
    <mapping>
        <class-a>org.apache.camel.component.dozer.ExpressionMapper</class-a>
        <class-b>generated.TripRequestUpdateStatus</class-b>
        <field custom-converter-id="_expressionMapping" custom-converter-param="simple:Approved">
            <a>expression</a>
            <b>status</b>
        </field>
        <field custom-converter-id="_expressionMapping" custom-converter-param="simple:lgtc">
            <a>expression</a>
            <b>updatedBy.source</b>
        </field>
        <field custom-converter-id="_expressionMapping" custom-converter-param="simple:1">
            <a>expression</a>
            <b>updatedBy.value</b>
        </field>
    </mapping>
</mappings>

假的
一个,一个
生成的.TripRequestUpdateStatus
三脚架
身份证件
org.apache.camel.component.dozer.ExpressionMapper
生成的.TripRequestUpdateStatus
表达
地位
表达
updatedBy.source
表达
updatedBy.value

我不是唯一一个遇到这种情况的人。

只要在JMS端点上设置选项
jmsMessageType=Text
,告诉Camel使用基于文本的JMS消息即可

请参阅文档:

在发送到JMS端点之前,还可以使用以下命令将消息正文转换为
字符串

 <convertBodyTo type="String"/>


是否可以设置github回购协议来演示问题?如果有人能以这种方式帮助你,那就更容易了。请在你的问题中添加你的代码,并附上代码。谢谢@附加ltsallas代码。谢谢我没有看到任何代码,只有XML文件。需要查看您正在使用的代码。
 <convertBodyTo type="String"/>