Можно ли создать SOAPMessage из строкового представления всего сообщения SOAP? Причина, по которой я пытаюсь сделать это, заключается в том, что у меня есть обработчик SOAP для веб-службы, где я захватываю сообщение SOAP. Мне нужно сохранить все сообщение SOAP в веб-службе для отправки другому компоненту. Прямо сейчас веб-служба удаляет информацию о конверте SOAP. Поэтому в обработчике я сделал копию сообщения SOAP, base64 закодировал его, удалил исходное содержимое Body и добавил кодированную строку. В веб-службе я пытаюсь декодировать тело (закодированное сообщение SOAP) и восстанавливать его как SOAPMessage для отправки другому компоненту.
Создание SOAPMessage из строкового XML всего SOAP-сообщения
Ответ 1
Я сделал это в два шага. Сначала создан DOM-документ, а затем создайте SOAPMessage из документа.
Ответ 2
В соответствии с Javadoc, javax.xml.soap.MessageFactory
создавать методы предварительно заполняют SOAP-сообщение необходимыми объектами, такими как конверт, body, заголовок, обеспечивающий правильное отображение сообщения. Однако единственный вариант метода createMessage
, который принимает данные сообщения, принимает его как InputStream
. Следовательно, требуется преобразование String
to InputStream
, а именно создание нового байтового потока из строковых байтов.
Это упрощенный пример для краткости. В коде приложения можно избежать создания factory для каждого вызова метода, извлекая его в поле/константу, указать требуемую версию протокола SOAP, другую кодировку и т.д.
private SOAPMessage getSoapMessageFromString(String xml) throws SOAPException, IOException {
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message = factory.createMessage(new MimeHeaders(), new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))));
return message;
}