Не удалось извлечь тело из-за: 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;
}
}