簡體   English   中英

導致異常的IBM字符集標題

[英]IBM Character Set Header Causing Exceptions

我們有一個Spring Integration流,它消耗Websphere MQ Manager隊列中的消息。 這些消息通過一個簡單的過程放入,然后放入另一個隊列(在同一MQ Manager中)。

當我們嘗試將消息寫入最終目標隊列時,出現以下錯誤:

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'

解決此異常的正確方法是什么? 我們應該嗎:

  1. 在寫入最終的Websphere MQ隊列之前,從消息中剝離所有JMS_IBM_XXX標頭?
  2. 使用不同版本的罐子?
  3. 完全做其他事情嗎?

在從Websphere MQ隊列中提取消息並將它們最終寫入另一個Websphere MQ隊列的其他任何流程中,我們似乎都沒有遇到這個問題。

引用WebSphere MQ 7.5-MS_IBM_Character_Set

在WebSphere®MQ V7.5之前,使用WebSphere MQ消息傳遞提供程序遷移模式的應用程序可以將消息的JMS_IBM_Character_Set屬性設置為數字編碼字符集標識符。

發送消息時,存儲在JMS_IBM_Character_Set屬性中的編碼字符集標識符已映射到MQMD字段CodedCharacterSetID。

當將WebSphere MQ V7.5類用於JMS時,包含消息的JMSException:

 MQJMS1006: invalid value for 'JMS_IBM_Character_Set': '<number>' 

如果應用程序嘗試發送將JMS_IBM_Character_Set屬性設置為數字編碼字符集標識符的消息,則會引發。

必須將JMS_IBM_Character_Set屬性設置為Java字符集字符串,該字符串映射到應用程序要使用的編碼字符集標識符。 有關更多信息,請參閱將JMS字段映射到WebSphere MQ字段(傳出消息)

由於您使用的是7.0.1.3版本,而不是7.5或更高版本,因此該值必須是“數字編碼字符集標識符 ,這意味着它應該是850 (數字),而不是IBM850

在7.5版中,它應該是IBM850

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM