由于以下原因无法提取正文:javax.jms.JMSException:无法从字节构建正文(无法将已发送的Zip文件解压缩到ActiveMQ)

时间:2017-01-24 09:09:40

标签: c# jms activemq message-queue nms

我正在尝试使用在C#.NET上编写的客户端应用程序向ActiveMQ服务器发送消息。我有XML消息,我已将其转换为Zip流并尝试发送。

public IMessage SendMessage(string mqUri, string brokerUri, MemoryStream message, string username, string password)
    {
        Uri connecturi = new Uri(mqUri);

        IConnectionFactory factory = new NMSConnectionFactory(connecturi);

        using (IConnection connection = factory.CreateConnection(username, password))
        using (ISession session = connection.CreateSession())
        {
            IDestination destination = SessionUtil.GetDestination(session, brokerUri);

            using (IMessageProducer producer = session.CreateProducer(destination))
            {
                connection.Start();
                IBytesMessage request = session.CreateBytesMessage(message.ToArray());
                producer.Send(request);

                return request;
            }
        }
    }

在解析数据时,在服务器端出现异常,如:

执行JMS消息侦听器失败。引起:[org.apache.camel.RuntimeCamelException - 由于以下原因无法提取正文:javax.jms.JMSException:无法从字节构建正文。原因:java.io.StreamCorruptedException:无效的流标头:00010000。消息:ActiveMQObjectMessage。

当我调试代码并设置断点时,Bodylength和内容上有例外' request.Content'抛出类型' Apache.NMS.MessageNotReadableException'

的例外

enter image description here

在ActiveMQ服务器上是否有任何特殊的zip转换来发送消息?请帮忙。感谢

1 个答案:

答案 0 :(得分:0)

问题是将zip转换为 memorystream ,后来我发现它需要将.xml文件转换为 zipstream 而不是zip文件。

public static MemoryStream CreateZipStream()
    {
        using (ZipFile zip = new ZipFile())
        {
            MemoryStream outputStream = new MemoryStream();
            outputStream.Seek(0, SeekOrigin.Begin);
            string filePath =
                @"C:\YourXml.xml";
            zip.AddFile(filePath);
            zip.Save(outputStream);
            return outputStream;
        }
    }