2011-08-30 7 views
0

필자는 비누 헤더에 사용자 정의 요소가 필요한 스프링 - ws (2.0.2) 서비스를 구현했습니다. Dispatcher, marshallers 등을 테스트하는 유효한 요청을 생성하기 위해 Spring의 MockWebServiceClient를 사용하려고합니다.soapHeaders가 필요한 Spring-WS 웹 서비스를 테스트하려면 어떻게해야합니까?

문제점은 MockWebService가 Soap Body (페이로드)만을 지원하는 것 같습니다.

올바르게 생성 된 비누 요청에 액세스하려면 어떻게해야합니까?

Spring의 MockWebServiceClient 이외의 다른 방법으로 더 좋은 라이브러리가 있다면 괜찮을 것이다.

관련 링크 : 나는 보안 봄 웹 서비스를 테스트하고 싶어 할 때 http://forum.springsource.org/showthread.php?101708-MockWebServiceClient-amp-WS-Security
Add SoapHeader to org.springframework.ws.WebServiceMessage

답변

2

내가 비슷한 문제가 있었다, 나는, 그들은 끝 지점에 도달하기 전에 헤더를 수정하는 봄 인터셉터를 사용하여 종료 테스트를 위해서만 인터셉터를 사용할 수있었습니다.

당신이

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; 
    } 
} 

구성 봄 컨텍스트에서이 인터셉터를 선택하면 당신은

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

이가 필요한 보안 헤더를 추가 할 다른 인터셉터를 사용하여, 나는 SmartEndpointInterceptor를 구현, 인터셉터 만들기 메시지가 끝 지점에 도달하기 전에 MockWebServiceClient를 사용하여 웹 서비스를 테스트 할 수 있습니다.

+0

감사합니다. 필자는 제작 환경을 포함하는 테스트 용 대체 context.xml을 사용하기 때문에 인터셉터를 가정 할 수 있습니다. –

0

내가 정말로 원했던 작업복 라이브러리를 찾았습니다. 전체 요청이 포함 된 텍스트 파일 만 가져옵니다.

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

그것은 스프링 제공된 것들과 같은 요청 및 응답을 지원하는 정합 기. 그것은 또한 자체 테스트를 매우 독립적으로 유지합니다. (테스트 케이스에만 사용되는 완전히 새로운 클래스가 아닙니다.)