Полезная нагрузка сообщения объекта Camel JMS преобразуется из объекта в байтовое сообщение при использовании Websphere MQ

Я использую apache camel (Fuse 2.10.x) с мылом поверх http и мылом поверх jms. Сообщение JMS преобразуется из сообщения Object в формат сообщения Byte, что вызывает проблему при чтении сообщения.
Я использую JNDI-соединение для websphere MQ в среде JBOSS 5.0 GA.

<tx-connection-factory>
<jndi-name>MQConnFactory <xa-transaction />
<rar-name>wmq.jmsra.rar <connection-definition>javax.jms.ConnectionFactory</connection-definition>
< <config-property name="channel" type="java.lang.String">xxxx</config-property>
<config-property name="hostName" type="java.lang.String">xxxxx</config-property>
<config-property name="port" type="java.lang.String">xxxx</config-property>
<config-property name="username" type="java.lang.String">xxxxx</config-property>
<config-property name="password" type="java.lang.String">xxxx</config-property>
<config-property name="queueManager" type="java.lang.String">xxxxxx</config-property>
<config-property name="transportType" type="java.lang.Integer">CLIENT</config-property>
<security-domain-and-application>JmsXARealm</security-domain-and-application>
<min-pool-size>1 <max-pool-size>60 <idle-timeout-minutes>10 <blocking-timeout-millis>5000 </tx-connection-factory>


We faced someother problem with IBM attributes which were resolved by removing the attributes. Also we have camel header attribute to set the message

<route id="myrouteName"> 
<from uri="direct:myrouteName"></from>
<setHeader headerName="prequest">
<simple>${body[0]}</simple>
</setHeader>
<doTry>
<to uri="bean:myWrapService?method=mymethod" />
<filter>
<simple>${body.reqVO} != null</simple>
<setHeader headerName="CamelJmsMessageType"> <constant>Object</constant></setHeader>
<to uri="{{requestQ}}" pattern="InOnly" />
</filter>
<to uri="direct:responseHandler" />
<to uri="bean:responseService?method=myMethod"/>
<doCatch>
<exception>java.lang.Exception</exception>
<to uri="bean:exceptionHandler?method=process" />
<to uri="bean:responseService?method=myMethod" />
</doCatch>
</doTry>
</route>

This works fine with soap over http. RequestQ get messages as JMS object message. But same RequestQ get message by JMS Byte Message in soap over JMS. Suggest me approach which I can ensure that message recieved as Object message in all scenario. Note: Same scenario works fine with activeMQ as JMS provider. Other Tech Stack: Spring 3.x, hibernate, apache cxf and etc.

16:33:17,134 INFO [STDOUT] 16:33:17.133 [Camel (csCamelConfig) thread #8 - JmsConsumer[reqQueue]] DEBUG o.a.c.component.jms.JmsConfiguration - Sending JMS message to: queue://XXXXXXXXXX/REQ.QUEUE2?CCSID=819&encoding=1&targetClient=1 with message:
JMSMessage class: jms_object
JMSType: null
JMSDeliveryMode: 1
JMSExpiration: 0
JMSPriority: 0
JMSMessageID: null
JMSTimestamp: 0
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: false
CamelJmsDeliveryMode: 1
CamelJmsMessageType: Object
JMS_IBM_Character_Set: IBM437
JMS_IBM_Encoding: 273
JMS_IBM_Format:

JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 28
JMS_IBM_PutDate: 20140910
JMS_IBM_PutTime: 15475401
breadcrumbId: ID-INN58JT4BS-53364-1410346638012-2-8
operationName: pay
operationNamespace: http:/www.xxx.com/xxxxx/xxxxx/
class com.xxx.xxxx.xxx.vo.PayloadDTO

Таким образом, установка targetClient = 1 означает, что код просит базовый клиент JMS отправить сообщение как «необработанное» сообщение MQ. У него не будет никаких свойств JMS ... только заголовок MQ и полезная нагрузка. Любое приложение, получившее сообщение, не увидит сообщения JMS. Поэтому клиент JMS, если он увидит сообщение, сможет создать только байтовое сообщение.


person Balakumar Narayanasamy    schedule 10.09.2014    source источник
comment
Я отправляю сообщение Soap через JMS (веб-сервис) с помощью клиента MQ. Сообщение отправляется как дейтаграмма. Конечная точка CXF определена в Camel. CXF дает нам упорядоченный объект, который преобразуется в универсальный объект данных нашего собственного домена (также известный как Payload). Затем универсальный объект данных удаляется в MQ, который обрабатывается другим набором приложений домена.   -  person Calanais    schedule 10.09.2014
comment
Удалось решить проблему, удалив атрибут targetClient = 1. Странно, но решение работает   -  person Balakumar Narayanasamy    schedule 10.09.2014
comment
У нас есть начальная проблема с заголовками IBM, вызывающая проблему с указанием ожидаемого значения «java.lang.integer» вместо «java.lang.String». Не слишком уверен, почему верблюд устанавливает его со строковым атрибутом. В блогах и форумах было немного ссылок на использование атрибута targetClient = 1. Он устанавливается через расширенный класс JndiResolver класса Spring. См. Журналы, размещенные выше. Он показывает, что targetClient = 1 установлен. Отправка сообщения JMS по адресу: queue: //XXXXXXXXXX/REQ.QUEUE2? CCSID = 819 & encoding = 1 & targetClient = 1 с сообщением:   -  person Balakumar Narayanasamy    schedule 10.09.2014


Ответы (1)


Где был настроен этот целевой клиент? Я не вижу в конфигурации выше.

Не могли бы вы более подробно объяснить, как отправляется сообщение? MQ JMS не выполняет преобразование типа объекта JMS, поэтому при прочих равных, сообщение, если оно вошло в качестве объекта, должно выходить как одно.

person Calanais    schedule 10.09.2014
comment
Я вижу эту конфигурацию; что касается проблемы, требующей этого, я не понимаю; хотя я вижу другие ссылки, в настоящее время мне не ясны проблемы. Что я могу подтвердить, так это то, что любой параметр targetClient = 1 эффективно предотвращает обмен любыми другими байтовыми сообщениями. - person Balakumar Narayanasamy; 10.09.2014
comment
16: 33: 19,465 ИНФОРМАЦИЯ [STDOUT] 16: 33: 19.465 [Camel (csCamelConfig) поток № 8 - JmsConsumer [paymJmsReqQueue]] ОТЛАДКА oacamel.processor.SendProcessor - >>>> Конечная точка [direct: // responseHandler] Exchange [ Сообщение: com.xxx.xxxx.base.vo.PayloadDTO@e486e6]
16: 33: 19,466 INFO [STDOUT] 16: 33: 19.466 [Camel (csCamelConfig) поток № 8 - JmsConsumer [paymJmsReqQueue]] INFO oacprocessor .interceptor.Tracer - ID-INN58JT4BS-53364-1410346638012-2-10 >>> (responseHandler) direct: // responseHandler -> bean: // responseProcessor? method = process ‹** Шаблон: InOut, Headers: {CamelCxfMessage = {javax.xml.ws.wsdl.port = {http: /impl.xxxx.xxxx.xxx.com/} ServiceImplPort, JMSCorrelationID = null, JMSMessageID = ID: 414d5120484b49424b3153312020202020318cf553bd5653essage.cmox = [MessageInfo INPUT: {http: /www.xxx.com/xxxxx/xxxx/} xxxx], JMSDeliveryMode = 1, org.apache.cxf.message.Message.PROTOCOL_HEADERS = {JMS_IBM_Character_Set = [IBMcoding_IBM], J3 ], JMS_IBM_Format = [], JMS_IBM_MsgType = [8], JMS_IBM_PutApplType = [28], JMS_IBM_PutDate = [20140910], JMS_IBM_PutTime = [15475401], JMSDeliveryMode = [1], JMSExpiration = [0], JMSMessageID = [ID: 414d512024203bd] [false], JMSTimestamp = [1410364074010], JMSXAppID = [Клиент Websphere MQ для Java], JMSXDeliveryCount = [1], JMSXUserID = [root]}, JMSXUserID = root, org.apache.cxf.interceptor.LoggingMessage.ID = 2 , JMS_IBM_MsgType = 8, JMSReplyTo = null, JMSTimestamp = 1410364074010, JMSDestination = null, JMSType = null, JMSXDeliveryCount = 1, JMSRedelivered = false, javax.xml.ws.wsdl.interface = {xxx}. / xxxx /} xxxx, org.apache.cxf.request.uri = null, HTTP.REQUEST = null, Accept = /, org.apache.cxf.headers.Header.list = [], или = Exchange [JmsMessage [JmsMessageID: ID: 414d5120 484b49424b31533120202020318cf553bd565320]], JMSExpiration = 0, JMSPriority = 0, javax.xml.ws.wsdl.service = {http: /impl.xxx.xxx.xxx.xx/} ServiceImplService, JMS_IBMpeg.x. .cxf.binding.soap.SoapVersion = org.apache.cxf.binding.soap.Soap11 @ ab8a96, JMS_IBM_PutTime = 15475401, org.apache.cxf.message.Message.ENCODING = null, org.apache.cxfessage.message. .QUERY_STRING = null, JMSXGroupID = null, JMS_IBM_Character_Set = IBM437, HTTP.RESPONSE = null, org.apache.cxf.request.method = null, javax.xml.ws.wsdl.operation = {http: /www.xxx.xxx / xxxx / xxxxx /} xxxxx, org.apache.cxf.transport. Destination=org.apache.camel.component.cxf.transport.CamelDestination@17a840, javax.xml.ws.wsdl.description = camel: // cwmq: queue: jmsReqQueue? JmsMessageType = Байты & replyTo = jmsRespMessageType = Байты & replyTo = jmsRescoding = JMSRespMQuee, 27 Content-Type = /, JMSXAppID = Клиент Websphere MQ для Java}, JMSXUserID = root, breadcrumbId = ID-INN58JT4BS-53364-1410346638012-2-8, JMS_IBM_Character_Set = IBM437, JMSExpiration = 0, JMSountXD 1, JMSXAppID = Клиент Websphere MQ для Java, JMS_IBM_Format =, prequest=com.xxx.xxxx.xxxxx.PRequest@93899f, JMSTimestamp = 1410364074010, JMS_IBM_PutApplType = 28, org.apache.cHeader.list. JMSDeliveryMode = 1, JMS_IBM_PutDate = 20140910, JMSPriority = 0, JMSRedelivered = false, JMS_IBM_Encoding = 273, operationNamespace = >>> Конечная точка [bean: // responseProcessor? Method = process] Exchange [Сообщение: com.scb.channels.base.vo.PayloadDTO@e486e6] JmsConsumer [reqQueue]] ОТЛАДКА oaccjms .EndpointMessageListener - конечная точка [pwmq: // queue: reqQueue? ConcurrentConsumers = 2 & exchangePattern = InOnly & jmsMessageType = Object & maxConcurrentConsumers = 10 & maxMessagesPerTask = 2] Потребитель получил сообщение JMS:
NULL JMSMessage class:
JMSMessage2:
класс JMSMessage:

br> JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID: 414d5120484b49424b31533120202020318cf553051a5420
JMSTimestamp: 1410364124990
JMSCorrelationID: null
JMSDestination: null
JMSReply
br> JMSXAppID: клиент WebSphere MQ для Java
JMSXDeliveryCount: 1
JMSXUserID: ibnkmq
JMS_IBM_Character_Set: IBM437
JMS_IBM_Encoding: 273
JMS_IBM_Format:
JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 8
JMS_IBM_PutAppl10MSut_Put_Mut_PType_JMS_IBM_PutAppl10MSut_PM_M_B_M_B_M_B_M_B_M_B_M_B_JMS_: 28_IBM_PutApplType_MS_M_B_M_B_M_B_M
aced000573720023636f6d2e7363622e6368616e6e656c732e626173652e766f2e5061796c6f6164
44544f163e357ea7d7ff690200044c000c63757272656e7453746174657400124c6a6176612f6c61
6e672f537472696e673b4c000972657175657374564f7400214c636f6d2f7363622f6368616e6e65
6c732f626173652f766f2f42617365564f3b4c000a726573706f6e7365564f71007e00024c000974
72616365506174687400104c6a6176612f7574696c2f4c6973743b7870707372002b636f6d2e7363
622e6368616e6e656c732e626173652e766f2e42696c6c657250617952657175657374564f6aa292
32aa1e2e1f0200034c00106163636f756e74496e7175697279564f74002b4c636f6d2f7363622f63
68616e6e656c732f626173652f766f2f4163636f756e74496e7175697279564f3b4c001562696c6c
506179526567697374726174696f6e5 64f7400304c636f6d2f7363622f6368616e6e656c732f6261
73652f766f2f42696c6c506179526567697374726174696f6e564f3b4c001262696c6c6572506179
. ..

- person Calanais; 11.09.2014