Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反序列化JMS消息中的对象_Java_Jms_Websphere_Ibm Mq_Mq Visual Edit - Fatal编程技术网

Java 反序列化JMS消息中的对象

Java 反序列化JMS消息中的对象,java,jms,websphere,ibm-mq,mq-visual-edit,Java,Jms,Websphere,Ibm Mq,Mq Visual Edit,有人尝试过从IBM MQ Visual Edit反序列化JMS对象消息吗?我需要破译通过MQ作为JMS消息发送的对象。我将消息保存到一个文件中,并尝试使用ObjectInputStream读取它,如下所示: ObjectInputStream objectStream = new ObjectInputStream(new DataInputStream(new FileInputStream("PATH TO THE FILE"))); SomeObject result = ((SomeOb

有人尝试过从IBM MQ Visual Edit反序列化JMS对象消息吗?我需要破译通过MQ作为JMS消息发送的对象。我将消息保存到一个文件中,并尝试使用ObjectInputStream读取它,如下所示:

ObjectInputStream objectStream = new ObjectInputStream(new DataInputStream(new FileInputStream("PATH TO THE FILE")));
SomeObject result = ((SomeObject)objectStream.readObject());
但我有一个错误:

java.io.StreamCorruptedException: invalid stream header: 52464820
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:794)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:291)
    at com.railinc.emis.transaction.model.DeserializerClass.main(DeserializerClass.java:14)
java.io.StreamCorruptedException:无效的流头:52464820
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:794)
位于java.io.ObjectInputStream。(ObjectInputStream.java:291)
位于com.railinc.emi.transaction.model.DeserializerClass.main(DeserializerClass.java:14)
我对此进行了一些研究,发现用于序列化的类应该用于反序列化


如果以前有人尝试过,请告诉我您的使用经验。

我不知道IBM MQ Visual Edit,但如果它具有保存ObjectMessage的功能,那么它可能不仅会保存消息中包含的对象,还会保存头(包含JMS属性)。我认为仅仅使用ObjectInputStream无法从文件中读回对象。为什么不将该消息放在测试队列中并从那里读取它?

似乎有几种可能的原因导致“流头无效”。是的,您需要验证您获得的类是否与生成对象消息内容的类具有相同的
serialVersionUID
。能否向我们展示用于序列化的代码?我相信是相同的。但我只是想知道对象在放入队列时是如何序列化的(可能是IBM websphere内部的东西,我没有任何源代码)。@Plinio正如我所提到的,我没有访问序列化代码的权限,因为当我使用以下代码上下文=new InitialContext()向MQ发送消息时,会这样做;//查找队列=(队列)PortableRemoteObject.窄带(context.lookup(jndiQueueName),queue.class);//create sender=session.createSender(队列);//create text message ObjectMessage textMessage=session.createObjectMessage(message);//向队列发送者发送文本消息。发送(文本消息);当消息被发送时,它必须是被序列化的位置。发送方类实现是一个名为com.IBM.ejs.jms.JMSWrapQueueSender的IBM类。(很抱歉评论中的错误代码格式)@Andreas Vei然后这就是我最终要做的。将生产中的消息重新加载到我的开发环境中并对其进行调试。非常感谢大家的回答。