如何在没有转义字符的情况下写入CDATA

时间:2016-09-20 14:20:28

标签: java xml soap cdata xmlstreamwriter

我们有一个CDataInterceptor,以便将签名的XML文件包含在CDATA部分的soap信封中。

但是当我们执行代码时,我们正在获取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的任何解决方案,保留转义字符,例如&lt;,&gt;等?

BR

0 个答案:

没有答案