2012-08-17 10 views
5

(後続の質問:Getting raw XML response from Java web service clientSOAPハンドラから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をチェーンハンドラのメンバーとして設定するのは好きではありません。これは他の多くのベストプラクティスに違反していると感じています。誰かがこれを行うよりエレガントな方法を持っていますか?

+0

DOMオブジェクトをHttpSessionに設定できますか? – davidfmatheson

+0

@davidfmatheson:たぶん、文字列の代わりにDOMオブジェクトを使うのはなぜですか?これは本当に欲しいものですか? – FrustratedWithFormsDesigner

答えて

1

解決策は、JAXBを使用してオブジェクトをXMLに戻すことでした。 WebサービスクライアントにXMLを受け取り、それをPOJOに変換し、そのPOJOをXMLに変換し直してもらうことは冗長に思えるので、実際にはこれをやりたいとは思っていませんでした。

3

私のために働くように思われた2つの選択肢は両方ともhereと書かれています。私はまだThreadLocalの使用がうまくいっているかどうかについての返答を受け取っていませんでしたが、なぜそうはならないのか分かりません。

元の質問に追加された私のsecoondメソッドは、ハンドラのルートに行くことでした。 WSコールアウトをデバッグしているとき、私は、invocationPropertiesマップがresponseContextオブジェクト内の内部パケット構造の一部としてSOAPレスポンスを持っていることに気付きましたが、そこに到達する方法がないようでした。 ResponseContextは、名前の値のペアのセットです。しかし、私がResponseContextのソースコードをthis locationに読み込んだとき、getメソッドのコードにApplication Scopedプロパティが見つからなかった場合はnullを返すコメントがあります。それ以外の場合、それはパケットのinvocationPropertiesから読み取られます。私が望んでいたようだった。そこで、私は、キー/値のペア(Google:jaxwsのアプリケーションスコーププロパティを設定する)のスコープを設定する方法に目を向けました。これは、コンテキストが低調に見せていたことです.Jax-wsの仕様もう一方のスレッド。

私はまたパケットについていくつかの読書をしました、https://jax-ws.java.net/nonav/jax-ws-20-fcs/arch/com/sun/xml/ws/api/message/Packet.html

私はこれがあなたにとって意味をなされることを望みます。 WebサービスコールでSoap FAULTが発生した場合、JAXBを使用するのに3人が使用されないことが懸念されていました。このパケットは、Payment Gatewayから返されていたため、文書化されていない結果の

幸運。

関連する問題