我们有一个 CDataInterceptor 以便将签名的 XML 文件包含到 CDATA 部分的肥皂信封中。
但是当我们执行代码时,我们会得到 XML 转义,例如 & lt;CDATA 而不是 <[CDATA 或 & #xd; 换新线的时候。这使得服务由于格式无效而无法使用 SOAP 信封。
问题在这里:
public class CDataXMLStreamWriter extends DelegatingXMLStreamWriter {
private static final Pattern XML_CHARS = Pattern.compile( "[&<>]" );
private static final String CDataOpen = "<![CDATA[";
private static final String CDataClose = "]]>";
public CDataXMLStreamWriter(XMLStreamWriter del) {
super(del);
}
@Override
public void writeCharacters(String text) throws XMLStreamException {
boolean useCData = XML_CHARS.matcher( text ).find();
if (useCData) {
super.writeCharacters(CDataOpen);
super.writeCharacters(text);
super.writeCharacters(CDataClose);
//super.writeCData(text);
}else {
super.writeCharacters(text);
}
}
public void writeStartElement(String local) throws XMLStreamException {
super.writeStartElement(local);
}
}
writeCharacters 方法转义了所有这些特殊字符。您是否知道添加此 XML 以保留转义字符(如 <、> 等)的任何解决方案?
BR