質問

<!> amp;#26;などの文字参照を含む文字列を渡すWebサービスとクライアントがあります。 (0x1A)。これらはXML 1.0では無効ですが、XML 1.1では有効です。 AxisのXMLパーサーは、これらの文字参照のために例外をスローしています。応答をXML 1.1として解析する、またはXML宣言を挿入するように強制する方法はありますか? (現時点ではありません。)ハンドラーの使用を検討しましたが、XMLが既に解析された後に呼び出されることを理解しています。

役に立ちましたか?

解決

InputStreamまたはReaderを渡しますか?その場合、ソースを別のクラスにラップすることもできますが(BufferedReaderのように)、それを使用して不要な文字をドロップします。

他のヒント

これでかなり苦労すると思います。私の理解では、WSDL 2.0標準はXML 1.0に基づいています。それでは、WSDLで自身を記述し(XML 1.0を想定)、XML 1.1文字を含むメッセージの送信を開始する、どのようなサービスを呼び出すのですか?

Axis2サービスを定義するとき、services.xmlファイルでそのハンドラーを定義できます。たとえば、このページでは、 org.apache.axis2.receivers.RawXMLINOutMessageReceiverを使用しました...それはあなたがやろうとしていることではありませんが、見たり考えたりする場所になるかもしれません。

もう1つのオプションがあります-パーサーが入力をXML 1.1として扱うようにするためです。 Axis2はWoodstoxパーサーを使用しているため、WstxInputFactoryを拡張してメソッドcreatePrivateConfig()

をオーバーライドできます。
@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}

システムプロパティを介してカスタムファクトリを使用します: -Djavax.xml.stream.XMLInputFactory = mypackage.MyWstxInputFactory

このような回避策は、無効なXMLを生成するバグのあるWebサービスを絶対に変更できない場合にのみ注意してください。副作用が発生する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top