2016-06-24 11 views
1

JMSキューと通信するblueprint.xmlを使用してラクダルートを構築しています。私は、私のキューのコンシューマーとして働く私の春の起動アプリケーションがテキストメッセージの代わりにバイトメッセージとしてxmlを送信し、Springコンシューマーのチョークでこれを実行している不思議なエラーが発生しています。ここでバイトメッセージの代わりにテキストメッセージを送信する方法

は二つのメッセージ、テキスト1作品です:テキスト1が到着すると

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 = [email protected], marshalledProperties = [email protected], 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:[email protected] 
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 = [email protected], 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:[email protected] 

、私は、コンバータのエラーを取得:

org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method could not be invoked with incoming message 
Endpoint handler details: 
Method [public void com.xxx.trip.request.messaging.status.TripRequestUpdateStatusListener.handle(javax.jms.TextMessage)] 
Bean [com.xx[email protected]5a08d301] 
; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [javax.jms.TextMessage] for GenericMessage [payload=byte[197], headers={CamelFileLastModified=1466448102155, CamelFileParent=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data, CamelFilePath=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data\two.json, CamelFileLength=22, jms_destination=queue://tripRequest.updateStatus.v1.0, jms_priority=4, CamelFileAbsolute=true, jms_timestamp=1466767729354, CamelFileName=two.json, jms_redelivered=true, jms_deliveryMode=2, JMSXDeliveryCount=7, CamelFileNameConsumed=two.json, breadcrumbId=ID-ThomasLaptop-55205-1466767725209-0-4, BrokerPath=localhost, jms_replyTo=temp-queue://ID:ThomasLaptop-55210-1466767727833-1:1:1, CamelFileRelativePath=two.json, jms_correlationId=Camel-ID-ThomasLaptop-55205-1466767725209-0-6, id=1b46ad3a-5e61-e4d0-94bd-111807169bb1, CamelFileAbsolutePath=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data\two.json, jms_expiration=1466767749354, jms_messageId=ID:ThomasLaptop-55210-1466767727833-1:1:2:1:2, CamelFileNameOnly=two.json, timestamp=1466767742914}] 
    at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:94) ~[spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:66) ~[spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:721) ~[spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:681) ~[spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:651) ~[spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:315) [spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:253) [spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1158) [spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1150) [spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1047) [spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_91] 
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [javax.jms.TextMessage] for GenericMessage [payload=byte[197], headers={CamelFileLastModified=1466448102155, CamelFileParent=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data, CamelFilePath=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data\two.json, CamelFileLength=22, jms_destination=queue://tripRequest.updateStatus.v1.0, jms_priority=4, CamelFileAbsolute=true, jms_timestamp=1466767729354, CamelFileName=two.json, jms_redelivered=true, jms_deliveryMode=2, JMSXDeliveryCount=7, CamelFileNameConsumed=two.json, breadcrumbId=ID-ThomasLaptop-55205-1466767725209-0-4, BrokerPath=localhost, jms_replyTo=temp-queue://ID:ThomasLaptop-55210-1466767727833-1:1:1, CamelFileRelativePath=two.json, jms_correlationId=Camel-ID-ThomasLaptop-55205-1466767725209-0-6, id=1b46ad3a-5e61-e4d0-94bd-111807169bb1, CamelFileAbsolutePath=C:\Users\Thom\git\brms-poc-esb\rule-cancel\data\two.json, jms_expiration=1466767749354, jms_messageId=ID:ThomasLaptop-55210-1466767727833-1:1:2:1:2, CamelFileNameOnly=two.json, timestamp=1466767742914}] 
    at org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver.resolveArgument(PayloadArgumentResolver.java:124) ~[spring-messaging-4.3.1.BUILD-SNAPSHOT.jar:4.3.1.BUILD-SNAPSHOT] 
    at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:112) ~[spring-messaging-4.3.1.BUILD-SNAPSHOT.jar:4.3.1.BUILD-SNAPSHOT] 
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:138) ~[spring-messaging-4.3.1.BUILD-SNAPSHOT.jar:4.3.1.BUILD-SNAPSHOT] 
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:107) ~[spring-messaging-4.3.1.BUILD-SNAPSHOT.jar:4.3.1.BUILD-SNAPSHOT] 
    at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:90) ~[spring-jms-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    ... 10 common frames omitted 

私のラクダのルート:

<?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> 

これだけの問題は私だけではありません。

+0

は、問題を実証GitHubのレポをセットアップすることが可能ですか?誰かがこのように手助けするほうが簡単でしょう – ltsallas

+0

あなたのコードをあなたの質問に加えてください。 – ManoDestra

+0

@ManoDestraコードが添付されています。ありがとう! – Thom

答えて

3

JMSエンドポイントでオプションjmsMessageType=Textを設定するだけで、CamelにテキストベースのJMSメッセージを使用させることができます。

マニュアルを参照してください:http://camel.apache.org/jms

ます。また、使用してJMSエンドポイントに送信する前にStringにメッセージ本文を変換することができます:

<convertBodyTo type="String"/> 
関連する問題