String に変換された XML ドキュメントをすべて返す多くのメソッドを持つ JAX-WS エンドポイントがあります。
これは Sun Java System Application Server 9.1 Update 2 でしばらくの間正常に機能していましたが、新しいサーバーにデプロイする必要があります。
1 つの小さな問題を除いて、問題なく Glassfish 3.0.1 にデプロイされました。元の応答例の抜粋:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTransactionTypesResponse xmlns:ns2="http://myns.com.au/">
<return xmlns=""><?xml version="1.0" encoding="UTF-8"?>
<my_xml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Transfer In" name="Xfr or R/O In" type="X"/>
</my_xml>
</return>
</ns2:getTransactionTypesResponse>
</S:Body>
</S:Envelope>
新しいサーバーでは、次のように返されます。
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTransactionTypesResponse xmlns:ns2="http://myns.com.au/">
<return><?xml version="1.0" encoding="UTF-8"?>
<myxml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Administration Fee" name="Fee:AUM" type="U"/>
</my_xml>
</return>
</ns2:getTransactionTypesResponse>
</S:Body>
</S:Envelope>
ほぼ同じですが、左山括弧だけがエスケープされ、右山括弧はエスケープされません。
直接の HTTP POST リクエストを使用してこれをテストしたので、クライアント コードによって破壊されていないことがわかっています。
サーバーをGlassfish 3.1に再度アップグレードしましたが、含まれているWebサービスライブラリに問題があると思っていましたが、うまくいきませんでした。私のアプリケーションは、glassfish の Web サービス サポートに完全に依存しています。独自の WS または XML ライブラリは含まれていません。
エンドポイントは、基本的に次のように定義されます。
@WebService
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class MyEndpoint {
@WebMethod()
public String getTransactionTypes() {
return someMethodThatReturnsXmlString();
}
}
サービスの消費者としてそれを観察したこの投稿者からの参照を除いて、この問題を抱えている人を他に見つけることができませんでした。
これは公開されたサービスであるため、消費者がクライアントを更新してこれを処理できることに依存することはできません。興味深いことに、生成された Java クライアントを使用する既存のテスト インターフェースは問題ないように見えますが、これに頼ることはできません。
誰かがこれに遭遇し、それを解決できましたか? WS フレームワークにフックして、回避策として独自のエスケープを行う方法はありますか?
前もって感謝します。