署名された XML ファイルを CDATA セクションの SOAP エンベロープに含めるために CDataInterceptor があります。
しかし、コードを実行すると、<[CDATA または & #xd; の代わりに & lt;CDATA のように XML がエスケープされます。新しい行のとき。これにより、無効な形式のため、サービスは 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 を追加するソリューションを知っていますか?
ブラジル