MQ读消息报:MQJE086

环境:
 MQ6.0
   WAS 7.0.0.13
   Red Hat Enterprise Linux Server release 5.3
问题:
 WAS上的定时任务应用读MQ时报错,如下:

[11-8-3 20:03:12:535 CST] 00000031 SystemErr     R java.io.EOFException: MQJE086: 发生文件结束异常(“MQMessage.readFully()”)。
[11-8-3 20:03:12:536 CST] 00000031 SystemErr     R  at com.ibm.mq.MQMessage.readFully(MQMessage.java:1093)
[11-8-3 20:03:12:536 CST] 00000031 SystemErr     R  at com.ibm.mq.client.MQReader.read(MQReader.java:46)
[11-8-3 20:03:12:536 CST] 00000031 SystemErr     R  at com.suning.uum.service.DataVarietyService.varietyDateForObj(DataVarietyService.java:49)
[11-8-3 20:03:12:536 CST] 00000031 SystemErr     R  at com.suning.uum.service.DataVarietyService.varietyDate(DataVarietyService.java:95)
[11-8-3 20:03:12:537 CST] 00000031 SystemErr     R  at com.suning.uum.timing.UumMQVaryietyTask.doTask(UumMQVaryietyTask.java:27)
[11-8-3 20:03:12:537 CST] 00000031 SystemErr     R  at com.ibm.task.AbstractTask.process(AbstractTask.java:64)
[11-8-3 20:03:12:537 CST] 00000031 SystemErr     R  at com.ibm.task.MainControllerTask.doTask(MainControllerTask.java:66)
[11-8-3 20:03:12:537 CST] 00000031 SystemErr     R  at com.ibm.task.AbstractTask.process(AbstractTask.java:64)
[11-8-3 20:03:12:537 CST] 00000031 SystemErr     R  at com.ibm.task.quartz.DefaultQuartzJob.execute(DefaultQuartzJob.java:109)
[11-8-3 20:03:12:538 CST] 00000031 SystemErr     R  at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
  原来在WAS6.0上跑的时候没有问题,迁移到WAS7.0上时抱如下错误.
  IBM网站有个参考:
// The following 4 statements are to overcome a runtime problem with readUTF:
// An IOException occured whilst writing to the message buffer: java.io.EOFException:
// MQJE086: End of file exception readUTF
//      String msgText = rcvMessage.readUTF();
int strLen = rcvMessage.getMessageLength();
byte[] strData = new byte[strLen];
rcvMessage.readFully(strData);
String msgText = new String(strData);
说可以避免此问题,但通看了代码和这写得一点也不差.

  MQMessage mqMsg = MQQueueAccessor.getMsgFromQueue(MQQueueAccessor.MQ_TIME_OUT, queue);
   if(mqMsg!=null){
    int msgLength =  mqMsg.getMessageLength();
    byte[] buf = new byte[msgLength];
    mqMsg.readFully(buf);
    String xml = new String(buf,encoding);   
    return xml;
   }
 请求帮助,这几天问题多多.哎.
   
参与4

3同行回答

Luga LeeLuga Lee系统架构师None
这么好的帖子就这样沉了?显示全部
这么好的帖子就这样沉了?收起
互联网服务 · 2013-04-03
浏览2600
sapphirehehesapphirehehe技术经理ibm
可以把    mqMsg.readFully(buf); 修改为 for(int i=0;i显示全部
可以把    mqMsg.readFully(buf); 修改为
for(int i=0;i收起
互联网服务 · 2012-12-05
浏览2618
benson_liubenson_liu技术经理IT
1.6 低版本补丁的JDK 会出现该问题,如果你使用的是1.6 JDK,请先升级到最新的补丁,然后观察显示全部
1.6 低版本补丁的JDK 会出现该问题,如果你使用的是1.6 JDK,请先升级到最新的补丁,然后观察收起
IT分销/经销 · 2011-08-05
浏览2602

提问者

chanlehero
软件开发工程师苏宁电器
擅长领域: 中间件

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2011-08-05
  • 关注会员:1 人
  • 问题浏览:10197
  • 最近回答:2013-04-03
  • X社区推广