我们有一个Spring Integration流,它使用Websphere MQ Manager队列中的消息。这些消息通过一个简单的过程,然后被放入另一个队列(在同一个MQ管理器中)。
当我们尝试将消息写入最终目标队列时,我们收到以下错误:
Caused by: javax.jms.JMSException: MQJMS1006: invalid value for 'JMS_IBM_Character_Set': 'IBM850'.
at com.ibm.msg.client.wmq.v6.jms.internal.ConfigEnvironment.newException(ConfigEnvironment.java:431) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageProducer.sendInternal(MQMessageProducer.java:1153) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageProducer.send(MQMessageProducer.java:779) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.msg.client.wmq.v6.jms.internal.MQMessageProducer.send(MQMessageProducer.java:2718) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.sendMessage(JmsMessageProducerImpl.java:907) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.send_(JmsMessageProducerImpl.java:762) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.send(JmsMessageProducerImpl.java:393) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:333) ~[com.ibm.mqjms-7.0.1.3.jar:7.0.1.3 - k701-103-100812]
at org.springframework.jms.connection.CachedMessageProducer.send(CachedMessageProducer.java:181) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:636) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:607) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.jms.core.JmsTemplate$4.doInJms(JmsTemplate.java:584) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:580) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:706) ~[spring-jms-4.2.1.RELEASE.jar:4.2.1.RELEASE]
at org.springframework.integration.jms.JmsSendingMessageHandler.send(JmsSendingMessageHandler.java:145) ~[spring-integration-jms-4.2.0.RELEASE.jar:?]
at org.springframework.integration.jms.JmsSendingMessageHandler.handleMessageInternal(JmsSendingMessageHandler.java:115) ~[spring-integration-jms-4.2.0.RELEASE.jar:?]
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) ~[spring-integration-core-4.2.0.RELEASE.jar:?]
我们从初始队列中获取的消息具有以下IBM特定标头:
JMS_IBM_Character_Set=IBM850,
JMS_IBM_MQMD_CodedCharSetId=850,
JMS_IBM_Encoding=17,
JMS_IBM_PutApplType=11,
JMS_IBM_Format= ,
JMSXDeliveryCount=1,
JMS_IBM_PutTime=12534150,
JMS_IBM_MsgType=8
当我们尝试将处理过的消息写入最终的Websphere MQ队列时,它们仍然存在。
该项目使用以下IBM MQ依赖项jar:
compile 'com.ibm:com.ibm.mq:7.0.1.3'
compile 'com.ibm:com.ibm.mqjms:7.0.1.3'
compile 'com.ibm:com.ibm.mq.jmqi:7.0.1.3'
compile 'com.ibm:com.ibm.mq.headers:7.0.1.3'
解决此异常的正确方法是什么?我们应该:
JMS_IBM_XXX
标头
到最后的Websphere MQ队列?我们似乎没有在从Websphere MQ队列中获取消息并最终将它们写入另一个Websphere MQ队列的任何其他流中遇到此问题。
答案 0 :(得分:4)
引用WebSphere MQ 7.5 - MS_IBM_Character_Set:
在WebSphere®MQV7.5之前,使用WebSphere MQ消息传递提供程序迁移模式的应用程序可以将消息的JMS_IBM_Character_Set属性设置为数字编码字符集标识符。
发送消息时,存储在JMS_IBM_Character_Set属性中的编码字符集标识符已映射到MQMD字段CodedCharacterSetID。
对JMS使用WebSphere MQ V7.5类时,包含消息:
的JMSException如果应用程序尝试发送将JMS_IBM_Character_Set属性设置为数字编码字符集标识符的消息,则抛出MQJMS1006: invalid value for 'JMS_IBM_Character_Set': '<number>'
。
必须将JMS_IBM_Character_Set属性设置为Java字符集字符串,该字符串映射到应用程序要使用的编码字符集标识符。有关详细信息,请参阅Mapping JMS fields onto WebSphere MQ fields (outgoing messages)
由于您使用的是版本7.0.1.3而不是7.5或更高版本,因此该值必须为“数字Coded Character Set Identifier”,这意味着它应为850
(数字) ,而不是IBM850
。
在7.5版中,它应该是IBM850
。