Как отправить раздел CDATA в ответе SOAP на Websphere 8.5.5

#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 непосредственно в значение не помогает. Символы < и > также экранируются.