2011-08-30 7 views
0

私はsoapヘッダーのカスタム要素を必要とする私が実装したspring-ws(2.0.2)サービスを持っています。私は、SpringのMockWebServiceClientを使用して、ディスパッチャ、マーシャラーなどをテストするための有効なリクエストを生成しようとしています。問題は、MockWebServiceがSoap Body(ペイロード)をサポートするように見えるということです。soapHeadersが必要なSpring-WS Webサービスをテストするにはどうすればよいですか?

適切なヘッダを取得するために生成されるSOAP要求には、どうすればアクセスできますか?

SpringのMockWebServiceClient以外のこれを行うためのより良いライブラリがある場合は、これも問題ありません。

関連リンク:私はセキュリティで春のWebサービスをテストしたいとき http://forum.springsource.org/showthread.php?101708-MockWebServiceClient-amp-WS-Security
Add SoapHeader to org.springframework.ws.WebServiceMessage

答えて

2

が、私は同様の問題があった、私は私は、彼らがエンドポイントに到達する前に、ヘッダーを変更するために春のインターセプタを使用して終了しましたテストのためだけにインターセプタを有効にしました。

インターセプタを作成、私はSmartEndpointInterceptorを実装し、あなたは春のコンテキストでこのインターセプタ

<sws:interceptors> 
    <bean class="prasanna.ws.security.wss4j.ModifySoapHeaderInterceptor"/> 
    </sws:interceptors> 

public class ModifySoapHeaderInterceptor implements 
    SmartEndpointInterceptor 
{ 
    //WSConstants.WSSE_NS; 
    private static final String DEFAULT_SECURITY_URL = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 
    private static final String SECURITY_TAG = "Security"; 
    private static final String SECURITY_PREFIX = "wsse"; 
    private static final String USER_NAME_TOKEN = "UsernameToken"; 

    @Override 
public boolean handleRequest(MessageContext messageContext, Object endpoint) 
     throws Exception 
{ 
     SaajSoapMessage saajSoapMessage(SaajSoapMessage)messageContext.getRequest()); 
     SOAPHeader soapHeader = saajSoapMessage.getSaajMessage().getSOAPPart() 
      .getEnvelope().getHeader(); 

     //you can modify header's as you choose 
     Name headerElement = saajSoapMessage.getSaajMessage().getSOAPPart() 
      .getEnvelope() 
      .createName(SECURITY_TAG, SECURITY_PREFIX, DEFAULT_SECURITY_URL); 
     SOAPHeaderElement soapHeaderElement = soapHeader 
      .addHeaderElement(headerElement); 
    SOAPElement usernameToken = soapHeaderElement.addChildElement(
      USER_NAME_TOKEN, SECURITY_PREFIX); 

    SOAPElement userNameElement = usernameToken.addChildElement("Username", 
      SECURITY_PREFIX); 
    userNameElement.addTextNode("userid");//you can inject via spring 

    SOAPElement passwordElement = usernameToken.addChildElement("Password", 
      SECURITY_PREFIX); 
    passwordElement.addTextNode("password"); 
     return true; 
    } 
} 

設定を選択した場合はこれがに必要なセキュリティヘッダを追加します、他のインターセプタを使用することができますエンドポイントに達する前のメッセージ、MockWebServiceClientを使用してWebサービスをテストすることができます。

+0

ありがとう。私は、私のプロダクションを含むテスト用に別のcontext.xmlを使用しているので、私はそのコンテキストの中にインターセプタを置くことができます。 –

0

本当に欲しかったsmockライブラリを見つけました。それは、要求全体を含むテキストファイルだけです。

http://code.google.com/p/smock/wiki/SpringWs

春提供のものと同一のリクエストとレスポンスのmatcherをサポートしています。私のテストは非常に自己完結しています。 (私のテストケースでのみ使用される全く新しいクラスではなく)。

関連する問題