如果是通过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();

...

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

  1. DB2读取CLOB字段-was报错:操作无效:已关闭 Lob。 ERRORCODE=-4470, SQLSTATE=null

    DB2读取CLOB字段-was报错:操作无效:已关闭 Lob. ERRORCODE=-4470, SQLSTATE=null 解决方法,在WAS中要用的数据源里面配置连个定制属性: progressi ...

  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>会报错

    有些时候,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>会报错,错 ...

  3. java 报错及解决

    java文件编译报错:error: unmappable character for encoding ASCII 解决: 编译时:javac -encoding utf-8 TestJava.jav ...

  4. 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 mul ...

  5. java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错

    java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错 错误提示: java.lang.NoClassDefFoundError: Lor ...

  6. 【ActiveMQ】管理界面查看消息详情,报错/WEB-INF/tags/form/forEachMapEntry.tag PWC6199: Generated servlet error: The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

    ActiveMQ版本:5.12 JDK版本:1.8 ===================== 使用ActiveMQ过程中,在管理界面查看消息详情,发现报错: 查看日志信息,报错如下: 2017-11 ...

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

    在读取jxl的时候,运行的时候报错: java.lang.OutOfMemoryError: Java heap space     at jxl.read.biff.SSTRecord.<in ...

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

    在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释 ...

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

    有时候Java的Eclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多. 原因:这是jdk的问 ...

随机推荐

  1. 实体类的状态与Hibernate缓存

    一.Hibernate中实体类的三种状态 1.瞬时态 该状态下实体类对象的id属性没有值,该对象和session也没有关系. 实例: UserEntity user = new UserEntity( ...

  2. 错误:严重: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is

    严重: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request proc ...

  3. springboot jpa 多条件查询(单表)

    需要实现的功能: 多个搜索输入框:全部不填,则查出所有列表:填了条件,就按条件查找:填的条件个数不定. 方法实现的核心:jpa自带的Specification<T> (目前只需要单表,多表 ...

  4. 【转】@RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解 2014-06-02 11:24 23683人阅读 评论(2) 收藏 举报 目录(?)[+] 引言 ...

  5. yum -y update 报错:GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    用的是centos6.5的镜像,yum源太老了,修改了之后想更新一下: yum -y update 执行报错: warning: rpmts_HdrFromFdno: Header V3 RSA/SH ...

  6. Node.js学习笔记(三) --- package.json 及cnpm

    一.包 Nodejs   中除了它自己提供的核心模块外,我们可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理. 完全符合 ...

  7. shell编程之while死循环

    原文 在linux下编程的程序猿都知道shell脚本,就算你不怎么熟悉,也应该听过的吧!那在shell脚本中的死循环该怎么写呢? 对于熟悉C语言的猿人们来说,最简单的死循环应该这样写: ------- ...

  8. mysql数据库详解

    001 数据库应用系统设计 1.规划   2.需求分析   3.概念模型设计   4.逻辑设计   5.物理设计   6.程序编制及调试   7.运行及维护. 002 创建数据库 CREATE DAT ...

  9. 虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎

    例如我们可以用transform: translateZ(0); 来开启硬件加速 ..cube {-webkit-transform: translateZ(0);-moz-transform: tr ...

  10. mysql load data infile auto increment id

    1. 问题描述 当使用load data infile 向表中插入数据 而主键id是 auto_increment 时 ,执行 load data 不会报错 但插入也不成功 2. 问题解决 2.1 方 ...