Создание SOAPMessage из строкового XML всего SOAP-сообщения

Можно ли создать SOAPMessage из строкового представления всего сообщения SOAP? Причина, по которой я пытаюсь сделать это, заключается в том, что у меня есть обработчик SOAP для веб-службы, где я захватываю сообщение SOAP. Мне нужно сохранить все сообщение SOAP в веб-службе для отправки другому компоненту. Прямо сейчас веб-служба удаляет информацию о конверте SOAP. Поэтому в обработчике я сделал копию сообщения SOAP, base64 закодировал его, удалил исходное содержимое Body и добавил кодированную строку. В веб-службе я пытаюсь декодировать тело (закодированное сообщение SOAP) и восстанавливать его как SOAPMessage для отправки другому компоненту.

Ответ 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;
}