java - MQ EBCDIC 数据转换 (25) 解释为换行并转换为 15 时出现问题

标签 java ibm-mq ibm-midrange mq tibco

我们遇到了一个有趣的问题。

我们在 AS400 系统之间进行了集成,该系统以 EBCDIC 格式发送 MQ 消息,由 TIBCO BW MQ 插件拾取并进行处理。这些都是金融交易。

我们遇到的问题是,当数据元素(压缩十进制)包含奇数数字时,例如 251-25925001-25999 等。TIBCO BW MQ 插件将数据元素解释为 151-159 等。

因此,我们将 25125 金额解释为 15125,导致交易计数缺失 100 美元(金额以美分为单位)。 TIBCO BW MQ 插件底层使用 Java,因此这可能是 Java 问题。 AS400 能够以 25125 发送和接收。但是,当我们从 MQ 资源管理器浏览消息时,我们也会看到数据元素值呈现为 15125

AS400 团队指出,由于他们能够以 25125 形式发送和接收,因此问题不在他们这边。以前有人遇到过类似的问题吗?如果是这样,你是如何解决的?这是 MQ 客户端的问题还是 AS400 MQ 传递消息的问题?

最佳答案

我对 TIBCO 不熟悉...

但一般来说,通过 MQ 传递打包数据是一个坏主意。

MQ 是多平台的,只有两种方式发送消息。作为字符串和原始字节。当您将其作为字符串发送时,它将根据所涉及的平台处理从一种编码到另一种编码的转换。

如您所见,将压缩十进制视为字符串是行不通的。

TIBCO 可能具有处理原始消息的功能,在 TIBCO(或您的 Java 应用程序?)中的某个位置,您必须配置 EBCDIC 到 ASCII (Unicode) 转换以及解压压缩的十进制字段。您还必须设置 MQ 来发送原始消息。

否则,您需要 IBM i 端解压数据,然后再将其作为 MQ 字符串消息发送。

关于java - MQ EBCDIC 数据转换 (25) 解释为换行并转换为 15 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595419/

相关文章:

java - 使用单个 Spring Boot 应用程序收听多个 IBM MQ

java - 既然 XMLBeans 已经退役了,用什么来代替它呢?

Java 斐波那契数列 BigInteger

java - 使用 Java 发现 USB 大容量存储设备

java - 将 JMS 消息转换为 IBM PCF

SQL 查询 - db2/400 iseries

java - 胖客户端 session 管理和安全

java - 从java代码获取队列深度

Tomcat 忽略 removeAbandonedTimeout 并关闭池中的连接

sql - 在 SQL 中搜索 %(