通过JAVA从MQ读取消息的时候报错及解决

如果是通过JAVA将消息写入到MQ,再通过JAVA去读取消息,采用MQMessage读消息的方法readUTF()去读取的时候,就不会报错,可以正常读出来。如果采用在MQ资源管理器中插入测试消息或者是通过另外一台MQ服务器往当前MQ服务器通过远程队例写消息过来,通过JAVA读取出会错,我这里疑点有两个:

1、通过MQ资源管理器放入的消息的编码是什么?是否在读消息的时候需要指定读消息的编码?我通过JAVA进入的编码为1381,读的时候也是1381

2、我现在JAVA这边的MQ LIB是从WEBSPHERE6中取出来的,因为MQ7中带的JAR包老是报一些类不存在,现在的MQ服务是V7,不知道是否与这个有关。

个人感觉第一种原因的可能性最大,但不知道MQ的默认字体是什么?

通过命令DISPLAY QMGR可以查看到当前MQ使用的默认字符集为1381,其它的地方也说MQ在WINDOWS上安装的时候默认字符集为1381,可是我通过JAVA程序去读的时候,设置的CCSID也为1381,也是读的时候老是报如下错误:

java.io.EOFException
 at java.io.DataInputStream.readFully(Unknown Source)
 at java.io.DataInputStream.readUTF(Unknown Source)
 at java.io.DataInputStream.readUTF(Unknown Source)
 at com.ibm.mq.MQMessage.readUTF(MQMessage.java:1229)
 at test.MessageByMQ.getMessage(MessageByMQ.java:123)
 at test.MessageByMQ.main(MessageByMQ.java:146)

我通过JAVA往里面放消息设置的CCSID也为1381却可以正确读出来,但这里就搞不懂为什么读不出来了,

难道是上面提到的第三个原因,我的JAR包是V6的,MQ是V7的?

基本解决:
原来读消息的方法为:readUTF()
但是这种方式在其它的应用程序采用writeUTF写入消息的时候不会报错,就是我上面提到的当前的JAVA程序可以读出该程序中写入的消息,
但是通过MQ资源管理器放入的测试消息就不是UTF这样的格式的,所以会报错,这说面从MQ中读消息的时候读取的格式必须与放入消息的格式相兼容,否则读取消息的时候会报错。
后来尝试采用readLine的方式去读取,可以正常读出来,但是如果写入的是XML这样的消息,采用readLine就不行了,后面尝试readStringOfCharLength方法,可以正常读出客户端应用程序通过writeBytes方法写入的消息,也可以正常读出通过MQ客户端放入的测试报文,
这个问题搞了我一整天,终于可以暂时放一下了。

读的代码如下:

...

MQMessage retrieve = new MQMessage();
String message=retrieve.readStringOfCharLength(32000).trim();

...

时间: 2024-10-13 21:00:25

通过JAVA从MQ读取消息的时候报错及解决的相关文章

python 读取数据库,老是报错。

在8.04.4环境下(其实我觉得跟环境无关,是我语句有问题): $ dpkg -l | grep -i python ii  libapache2-mod-python                 3.3.1-2build1               Apache 2 module that embeds Python within th ii  moinmoin-common                       1.5.8-5.1ubuntu2.5          Python

tensorflow读取jpg格式图片报错 ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images

当运行mpimg.imread("img.jpg")时,spyder 出现如下错误: ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images 解决办法就是  安装pillow即可 我是在anaconde里安装的很简单,执行如下步骤即可: tensorflow读取jpg格式图片报错 ValueError: Only kn

Python读取CSV文件,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 727: illegal multibyte sequence

Python读取CSV文件,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 727: illegal multibyte sequence 解决办法: 在语句open(sFileName,newline='')中,增加encoding='UTF-8',如下: open(sFileName,newline='',encoding='UTF-8') Python读取CSV文件,报错:UnicodeDecode

MyEclipse-java读取jxl的时候报错OutOfMemoryError

在读取jxl的时候,运行的时候报错: java.lang.OutOfMemoryError: Java heap space     at jxl.read.biff.SSTRecord.<init> 有人说修改MyEclipse.ini,我的行不通,解决方案是打开window->preferences->Java->Installed JRE ,点击右侧的Edit 按钮,在编辑界面中的 “Default VM Arguments ”选项中,填入如下值即可. -Xms64m

java报表工具FineReport常见的数据集报错错误代码和解释

在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下. NS-war-remote=错误代码\:1117 压缩部署不支持远程设计 NS_LayerReport_MultiDs=错误代码\:1101 行式引擎不支持多数据源展示 NS_LayerReport_RowCol=错误代码\:1102 行式引擎不支

Java @override报错的解决方法

有时候Java的MyEclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多. [size=18.0180187225342px]       这是jdk本身的问题,@Override是JDK5就已经有了,但是不支持对接口的实现,也就是说使用@Override的时候其父类必须是一个类,而不能是接口,否则会报错.JDK6修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@Over

【JAVA】 @override报错的解决方法

有时候Java的Eclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多. 原因:这是jdk的问题, JDK5就已经有  @Override,但是不支持对接口的实现,认为这不是Override而报错.只支持对继承覆盖. JDK6修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@Override.

java菜鸟篇&lt;二&gt; eclipse启动tomcat报错的问题:Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread &quot;main&quot;

9.1今天不知道自己瞎搞eclipse的时候按到了什么键,然后再启动程序的时候就会报错: 如下: Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"(溢出内存错误) 解决方案: 然后就发现自己原来设置扩大堆内存的没有了,要重新设置 如图: 重新启动项目,OK解决了!!哈哈哈

Java 对象流(输入-输出)objectoutputstream序列化报错

报错:java.io.notserializableexception 解决方法:添加下面代码实现 对象类 1 package com.etc._07ObjectDemo; 2 3 import java.io.Serializable; 4 5 public class Person implements Serializable { 6 private int id; 7 private String name; 8 private String sex; 9 public int getI