- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 Java 应用程序浏览来自大型机 IBM MQ 队列的消息(EBCDIC 消息)。我需要浏览消息,而不是消费它们。这是代码:
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
// Set properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, host);
cf.setIntProperty(WMQConstants.WMQ_PORT, port);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channel);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, qmgr);
cf.setIntProperty(WMQConstants.WMQ_RECEIVE_CONVERSION, WMQConstants.WMQ_RECEIVE_CONVERSION_QMGR);
QueueBrowser browser = context.createBrowser(context.createQueue("queue:///" + queueName + "?targetClient=1"));
Enumeration enumeration = browser.getEnumeration();
while (enumeration.hasMoreElements()) {
TextMessage messageInTheQueue = (TextMessage) enumeration.nextElement();
System.out.println(messageInTheQueue);
nbRecords++;
}
System.out.println()
的结果如下:
JMSMessage class: jms_text
JMSType: null
JMSDeliveryMode: 2
JMSMessageID: ID:c1d4d840d4d8e3c1e2f24040404040405e2432bd21aa1b02
JMSTimestamp: 1579537307450
JMSRedelivered: false
JMSXAppID:
JMSXDeliveryCount: 1
JMSXUserID:
JMS_IBM_Character_Set: IBM037
JMS_IBM_Encoding: 273
JMS_IBM_Format: MQSTR
JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 8
JMS_IBM_PutDate: 20200120
JMS_IBM_PutTime: 16214745
ÍÍÑÀ ...
我想将此 EBCDIC 消息 ÍÍÑÀ ...
转换为可读的内容 (ASCII)。
我尝试将 enumeration.nextElement()
转换为 JMSByteMessage
但出现此异常:
class com.ibm.msg.client.jms.internal.JmsTextMessageImpl cannot be cast to class com.ibm.jms.JMSBytesMessage
我该怎么做?
解决方法:使用适用于 Java 的 MQ 类 而不是适用于 Java 的 MQ JMS 类:
byte[] strData = new byte[theMessage.getMessageLength()];
theMessage.readFully(strData, 0, theMessage.getMessageLength());
这里有一些例子:https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q030840_.htm
最佳答案
关于 OP 的原始代码,以下文档指出接收转换和 CCSID 仅对 MQDestination 类有效:https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-properties-mq-classes-jms-objects
因此,这可以通过用于 JMS 的 IBM MQ 类来完成。你只需要以一种更迂回的方式来做。
为了使 QueueBrowser 读取 EBCDIC 格式的消息,您需要将 JMS 队列转换为 MQDestination,然后设置 receiveConversion 和 receiveCCSID,然后在创建浏览器时,将 MQDestination 转换回常规 JMS 队列。像这样:
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
// Set properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, host);
cf.setIntProperty(WMQConstants.WMQ_PORT, port);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channel);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, qmgr);
JMSContext context = cf.createContext();
MQDestination targetQueue = (MQDestination) context.createQueue("queue:///" + queueName)
targetQueue.setReceiveCCSID(WMQConstants.CCSID_UTF8);
targetQueue.setReceiveConversion(WMQConstants.WMQ_RECEIVE_CONVERSION_QMGR);
targetQueue.setMessageBodyStyle(WMQConstants.WMQ_MESSAGE_BODY_MQ);
QueueBrowser browser = context.createBrowser((Queue) targetQueue);
Enumeration enumeration = browser.getEnumeration();
while (enumeration.hasMoreElements()) {
TextMessage messageInTheQueue = (TextMessage) enumeration.nextElement();
System.out.println(messageInTheQueue);
nbRecords++;
}
以这种方式执行时,您也不需要使用 JMS URI 属性来设置目标客户端,因为 MQDestination 具有所有必要的 getter/setter 来修改属性负载,否则这些属性将使用 URI 完成。
有关 MQDestination 的更多信息,请参阅以下文档:https://www.ibm.com/docs/en/ibm-mq/9.2?topic=jms-mqdestination
关于jms - 大型机 MQ 到 EBCDIC 中的独立 JMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59829168/
我正在尝试使用以下代码将 EBCDIC 文件转换为 ASCII: InputStreamReader rdr = new InputStreamReader(new FileInputStream()
我有一个 GUI,我尝试将 EBCDIC 字符串转换为十六进制,但它不起作用:/ ebcdichex.addActionListener(new ActionListener() {
我正在传递 ebcdic 编码的数据。像这样的东西: s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ' 尝试 .decode('cp500') 是错误的,但正确的方法是什么?如果我
如何修改以下 SQL 以返回所选列的第一个字符的 EBCDIC(或者应该是 ASCI?)值>? select substr(PLAN_SLD_CHNL_CD,1,1) from GG60.SUSP
我想要做的是能够通过本地PC上的USS通过sshfs挂载主机上的一些文件。我可以做到这一点,但 sshfs 不能直接完成从 EBCDIC 到 ascii/unicode 的转换。有没有我可以设置的标志
我创建了一个字符串,并使用 EBCDIC 编码转换了一个字节数组。当我打印数组时,H 的值与 EBCDIC 图表中发现的值不同。 预期输出 “H”的 EBCDIC 值 --> 200,根据链接 EBC
我正在尝试使用 IBM 代码页将字符串从 ASCII 转换为 EBCDIC。除了转换为不可打印字符的小写字母“a”外,转换是正确的。 这是一段在 Windows 7 中运行的 groovy 脚本,它说
我正在编写一个 Hive UDF 将 EBCDIC 字符转换为十六进制。Hive 表中存在 Ebcdic 字符。目前我可以对其进行转换,但转换时会忽略一些字符。 示例: 这是存储在表中的 EBCDIC
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是
我遇到了一个需求,我需要将一个字符串转换为 EBCDIC 编码,然后对其进行排序。我们需要使用 EBCDIC 对其进行排序,因为该字符串必须进入大型机。我要排序的字符串将只有大写字母和整数。 我在谷歌
我必须为外部实体准备一个文件,该实体使用带有 COBOL 的 IBM 大型机,并且要求文件以 EBCDIC 编码。我正在用 C# 创建文件。我想这是一个由两部分组成的问题...首先,下面的代码是否足以
这是老手(er)的一个:-) 我正在从大型机 DB2 表中读取二进制转储。该表具有 varchar、char、smallint、integer 和 float 列。有趣的是,DB2 使用了代码页 42
背景:我必须编写一个应用程序,该应用程序采用设计不佳的 EBCDIC 文件,其中包含使用 ASCII 行终止符的二进制数据,有时二进制数据恰好包含 ASCII CRLF,这会导致行分割不正确。我需要采
我想了解这种转换到底是如何发生的。 http://www8.cs.umu.se/~isak/Snippets/a2e.c /* ** ASCII EBCDIC conversion functio
我们有一个通过 MQ 与外部通信的进程。外部系统在大型机 maching (IBM z/OS) 上运行,而我们在 CentOS Linux 平台上运行我们的进程。到目前为止,我们从未遇到过任何问题。
将 ASCII 字符串转换为 EBCDIC 时: System.out.println(new String("0810C220000082000000040000000000000005285230
我必须处理来自大型机的文件。文件中有一些非拉丁文本。我必须处理一些无效字符的非拉丁字符。由于大型机以 EBCDIC 格式对数据进行编码,因此我必须将其转换为 ASCII 才能进行验证。 我用了this
如果我有一个 EBCDIC 格式的字符数组,我想将该数组保存到一个文件中。我正在考虑使用 fputs 输出字符数组,而无需先将其转换为另一种格式。 问题) 使用 fputs 编写 EBCDIC 是否合
我需要将“767f440128e1a00a”十六进制数据转换为打包的 EBCDIC 字符串。我希望所有 result 结果都变成一个字符串,但 python 给出 Unicode 错误 Unicode
我的问题很简单。Pig (Hadoop) 可以处理 ebcdic 文件吗?我有一些,我想在 Hadoop 平台中使用 Pig 来处理和处理它们。 目前我已保存文件并尝试按如下方式加载: A = LOA
我是一名优秀的程序员,十分优秀!