2016-09-01 6 views
0

私はJava7とJAX-WSでSOAP Webサービスを開発しました。これは、インターフェイスの抜粋です:JAX-WS SOAPハンドラのWebメソッドパラメータへのアクセス?

@WebService(name = "MyWebService", 
      targetNamespace = "http://www.something.com") 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 
public interface MyWebServiceInterface 
{ 
    @WebMethod(operationName = "handleMsg", 
       action = "handleMsg") 
    @Oneway 
    void handleMsg(@WebParam(name = "MessageHeader", 
          targetNamespace = "http://www.something.com", 
          header = true, 
          partName = "header") 
        MessageHeader header, 
        @WebParam(name = "MessageBody", 
          targetNamespace = "http://www.soemthing.com", 
          partName = "body") 
        MessageType body); 
} 

私はいくつかの追加のものを行うために、このWebサービス(それが仕事の罰金)にカスタムSOAPハンドラを実装しました。メソッドhandleFault(..)では、Webメソッドの元のMessageHeaderにアクセスする必要があります(上記のインタフェースを参照)。これはどうすればできますか?

public class MyHandler implements SOAPHandler<SOAPMessageContext> 
{ 
    // ... 

    @Override 
    public boolean handleFault(final SOAPMessageContext context) 
    { 
     final Boolean outbound = 
      (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

     // handle only incoming message which do have a message set 
     if (outbound != null && !outbound.booleanValue() && context.getMessage() != null) 
     { 
      MessageHeader header = 
      getOriginalHeaderOfFautlyMessage(); // <-- how can this be done? 
     } 
    } 
} 

答えて

1
SOAPMessage soapMsg = context.getMessage(); 
SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope(); 
SOAPHeader soapHeader = soapEnv.getHeader(); 

次に、あなたのヘッダーノードを抽出し、それをアンマーシャリングする必要があります。

+0

わかりました。私は 'soapHeader.getElementsByTagName(..)'を使って個々の要素を取り出し、手作業で 'MessageHeader'を構築することができます。それをスピードアップし、完全に生成されたオブジェクトを取得する方法はありますか?どういうわけか、それはすでにもう一方の方法です。 –

+0

@MarkusL CXFを使用していますか?もしそうなら、あなたのハンドラがUNMARSHALL段階を過ぎて呼び出された場合、あなたのWebメソッドparamsがList parameters = soapMessage.getContent(List.class)にあります。 http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-api/2.7.17/org/apache/cxf/interceptor/DocLiteralInInterceptor.java#DocLiteralInInterceptor およびhttp://cxf.apache.org/docs/interceptors.html – MGorgon

+0

いいえ、私はJAX-WSで純粋なJavaを使用しています! –

関連する問題