#java #soap #websphere #jax-ws #cdata
#java #soap #websphere #jax-ws #cdata
Вопрос:
Мне нужно отправить ответ SOAP с элементом типа xs: string. Этот элемент должен содержать раздел CDATA. По умолчанию реализация JAX-WS на Webphere 8.5.5 экранирует специальные символы, такие как ‘<‘ ‘>’ или ‘amp;’, но клиент хочет, чтобы ответ не экранировался и не был завернут в CDATA.
Объект со строковым элементом генерируется из wsdl maven с использованием wsimport с аннотацией:
@XmlElement(name = "messageContent", required = true)
protected String messageContent;
Я могу принять запрос, содержащий раздел CDATA, и все работает нормально. В MessageContent — это содержимое принятых CDATA, символы не экранируются. Но проблема заключается в отправке ответа в этом объекте — ответ каждый раз экранируется, и я не знаю, как правильно добавить раздел CDATA.
Я уже пытался изменить ответное сообщение в SOAPHandler и в LogicalHandler (где полезная нагрузка имеет тип javax.xml.transform.Источник). Я заменил исходный элемент новым элементом с разделом cdata:
Element newEl = document.createElement(origNode.getNodeName());
CDATASection cdata = document.createCDATASection(origNode.getTextContent());
newEl.appendChild(cdata);
origNode.getParentNode().replaceChild(newEl, origNode);
И каждый раз выходное SOAP-сообщение не содержит CDATA, а специальные символы экранируются.
Есть ли способ, как действительно добавить раздел CDATA, который присутствует в выходном сообщении soap? Заранее благодарю вас.
Комментарии:
1. Я думаю, что из самого метода попробуйте вернуть строку XML, завернутую в CDATA. например,
<sender>John Smith</sender>
должно быть возвращено как<![CDATA[<sender>John Smith</sender>]]>
2. Спасибо за ваш ответ. К сожалению, установка CDATA непосредственно в значение не помогает. Символы < и > также экранируются.