(後続の質問:Getting raw XML response from Java web service client)SOAPハンドラからWebサービスクライアントにデータを戻すにはどうすればいいですか?
私はWebサービスレスポンスの生のXMLを取得できるSOAPメッセージハンドラを持っています。このXMLをWebサービスクライアントに取得する必要があるので、応答を送信する前にいくつかのXSL変換を実行できます。受信メッセージをキャッチし、生成された(WSDLからの)Webサービスクライアントで生のXMLを利用できるようにするSOAPハンドラからデータを取得する良い方法を見つけ出すことができません。もしこれが実現可能であればどんな考えですか?
私はこのような何かを作ってみた:
public class CustomSOAPHandler implements javax.xml.ws.handler.soap.SOAPHandler<javax.xml.ws.handler.soap.SOAPMessageContext>
{
private String myXML;
public String getMyXML()
{
return myXML;
}
...
public boolean handleMessage(SOAPMessageContext context)
{
...
myXML = this.getRawXML(context.getMessage());
}
//elsewhere in the application:
...
myService.doSomething(someRequest);
for (Handler h: ((BindingProvider)myService).getBinding().getHandlerChain())
{
if (h instanceof CustomSOAPHandler)
{
System.out.println("HandlerResult: "+ ((CustomSOAPHandler)h).getMyXML());
}
}
を非常に簡単なテストでは、これが動作しているようです。しかし、このソリューションはやや安価なハックのような感じです。私は生のXMLをチェーンハンドラのメンバーとして設定するのは好きではありません。これは他の多くのベストプラクティスに違反していると感じています。誰かがこれを行うよりエレガントな方法を持っていますか?
DOMオブジェクトをHttpSessionに設定できますか? – davidfmatheson
@davidfmatheson:たぶん、文字列の代わりにDOMオブジェクトを使うのはなぜですか?これは本当に欲しいものですか? – FrustratedWithFormsDesigner