首页 > 解决方案 > 如何在 Websphere 8.5.5 上的 SOAP 响应中发送 CDATA 部分

问题描述

我需要发送带有 xs:string 类型元素的 SOAP 响应。此元素必须包含 CDATA 部分。默认情况下,Webphere 8.5.5 上的 JAX-WS 实现会转义特殊字符,如 '<' '>' 或 '&' 但客户希望响应不转义并包装在 CDATA 中。

带有字符串元素的对象是 maven 使用带有注释的 wsimport 从 wsdl 生成的:

@XmlElement(name = "messageContent", required = true)
protected String messageContent;

我可以接受包含 CDATA 部分的请求,并且一切正常。在 messageContent 中是接受的 CDATA 的内容,字符不会被转义。但问题是在这个对象中发送响应 - 响应每次都被转义,我不知道如何正确添加 CDATA 部分。

我已经尝试在 SOAPHandler 和 LogicalHandler(其中有效负载的类型为 javax.xml.transform.Source)中修改响应消息。我已将原始元素替换为带有 cdata 部分的新元素:

Element newEl = document.createElement(origNode.getNodeName());
CDATASection cdata = document.createCDATASection(origNode.getTextContent());
newEl.appendChild(cdata);
origNode.getParentNode().replaceChild(newEl, origNode);

并且每次输出的 SOAP 消息都没有 CDATA 并且特殊字符被转义。

有没有办法真正添加输出肥皂消息中存在的 CDATA 部分?先感谢您。

标签: javasoapwebspherejax-wscdata

解决方案


推荐阅读