1

署名された 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 を追加するソリューションを知っていますか?

ブラジル

4

0 に答える 0