我有ejb消息驱动bean在WAS8java6上,每个想法都很好。
消息驱动程序bean监听mq队列。MainFrame上的队列
我从I 8迁移到I 9 (java 8)。
有些消息包含无法转换并导致异常的字符:
JMSCMQ1049: The character set '424(IBM424) Unmappable Action: REPORT我找到了一篇关于这个问题的文章
https://www.ibm.com/docs/en/ibm-mq/8.0?topic=java-character-string-conversions-in-mq-classes
IBM类中用于Java的字符串转换 IBM类用于Java,直接使用CharsetEncoders和CharsetDecoders进行字符串转换。字符串转换的默认行为可以配置为两个系统属性。可以通过com.ibm.mq.MQMD配置包含不可映射字符的消息的处理。 在IBMMQ8.0之前,IBM类中的字符串转换是通过调用java.nio.charset.Charset.decode(ByteBuffer)和Charset.encode(CharBuffer)方法来完成的。 使用这些方法中的任何一种都会导致默认替换(替换)格式错误或不可翻译的数据。此行为可能掩盖应用程序中的错误,并导致翻译后的数据中出现意外字符(例如?)。 从IBMMQ8.0中,为了更早、更有效地检测此类问题,IBM类直接使用CharsetEncoders和CharsetDecoders,并显式地配置格式错误和不可译数据的处理。默认行为是通过抛出适当的MQException来报告此类问题。
我不知道的是,如何在webSphere管理控制台或java实现中在队列的JMS设置中实现本文提供的解决方案。
有人知道怎么解决这个问题吗?
发布于 2021-05-30 18:20:49
所提供的链接的信息如下:
com.ibm.mq.cfg.jmqi.UnmappableCharacterAction指定对不可译数据进行编码和解码时要采取的操作。该值可以报告、替换或忽略。当无法在编码操作中映射字符时,com.ibm.mq.cfg.jmqi.UnmappableCharacterReplacement设置或获取要应用的替换字节,默认替换字符串用于解码操作。
如果您想模仿以前的行为,可以将以下系统属性设置为泛型JVM参数,下面的链接将讨论如何设置参数:在WebSphere应用服务器中设置通用JVM参数
-Dcom.ibm.mq.cfg.jmqi.UnmappableCharacterAction=REPLACE
-Dcom.ibm.mq.cfg.jmqi.UnmappableCharacterReplacement=63要获得不特定于WAS的更详细的答案,请参见以下内容:特殊字符问题: MQ消息放置错误: java.nio.charset.UnmappableCharacterException
https://stackoverflow.com/questions/67761195
复制相似问题