Не удалось извлечь тело из-за: javax.jms.JMSException: Не удалось собрать тело из байта (Не удалось извлечь отправленный файл Zip в ActiveMQ)

Я пытаюсь отправить сообщение на сервер ActiveMQ с моим клиентским приложением, написанным на C# .NET. У меня есть 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".

Существуют ли специальные почтовые преобразования для отправки сообщения на сервер ActiveMQ? Пожалуйста помоги. Спасибо

1 ответ

Решение

Проблема заключалась в преобразовании zip в поток памяти, позже я обнаружил, что необходимо преобразовать файл.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;
        }
    }
Другие вопросы по тегам