1

我们有一个 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

4

0 回答 0