Мой вопрос в основном такой же, как this question.
У меня недостаточно репутации, чтобы добавить комментарий к вопросу OP. Пожалуйста, помогитеВесна добавляет два элемента в заголовок SOAP
Проблемы у меня есть:
Вебов-служба SOAP Я пытаюсь вызвать требует заголовка, чтобы иметь два элемента, один из них содержат основные данные заголовка и других с синхронизацией конкретных данными, заголовок что требуется, выглядит так:
<header>
<initHeader>
<requestID></requestId>
<...some more elements>
</initHeader>
<syncHeader>
<appId></appId>
<dateTime></dateTime>
<event></event>
</syncHeader>
</header>
При создании заголовка с использованием WebServiceMessageCallback
(в частности, в процессе преобразования, показанного ниже), я получаю это:
"ERROR: 'The markup in the document following the root element must be well-formed.'"
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new StringSource(soapHeaderStr), ((SoapMessage) message).getSoapHeader().getResult());
Проблема в том, что трансформатор ожидает, что все элементы в заголовке будут находиться под одним корневым элементом. Но здесь заголовок имеет два.
Я изменил данные заголовка, как это (ниже), и трансформатор не жалуется.
<header>
<myRootelement>
<initHeader>
<requestID></requestId>
<...some more elements>
</initHeader>
<syncHeader>
<appId></appId>
<dateTime></dateTime>
<event></event>
</syncHeader>
</myRootelement>
</header>
В соответствии с указанной выше вопрос, ОП удалось решить эту проблему путем addigng фиктивный корневой элемент, как указано выше, с последующим удалением его непосредственно перед превращая его в заголовок.
Я хочу знать, как это удаление фиктивных корневых элементов возможно? Что-то вроде этого может быть? http://technology.amis.nl/2011/05/16/how-to-remove-unwanted-soap-header-elements-in-jax-ws/
Я не совсем уверен, как удалить корневой элемент, сохранив при этом своих детей.