2011-03-29 4 views
4

Junit 테스트 클래스에서 SpringWS 엔드 포인트 인 터 레이터를 호출하는 방법에 대한 코드 예제가 좋을 것입니다. 특히 SOAP 메시지 컨텍스트와 엔드 포인트 오브젝트를 준비하는 방법 컨텍스트의 SOAP 메시지에는 사용자 정의 SOAP 헤더가 포함되어야합니다. 모든 예를 감상 할 수있다스프링 ws 엔드 포인트 인터셉터에 대한 Junit 테스트

public class MyInterceptorTest 

private static String "... my XML SOAP test message ..."; 

@Test 
public testMyInterceptor() { 
    myMessageContext = ... Build a MessageContext with the XML message string; 
    myEndPointObject = ... Build an endpoint object; 
    boolean result = MyInterceptorClass.handleRequest(myMessageContext, myEndPointObject); 
    ... Check results; 
} 

뭔가 같은 ....

+0

어떤 버전의 Spring-WS? – skaffman

+0

Spring-WS 2.0을 사용하면 사용자 정의 SOAp 헤더가있는 SOAP 메시지를 생성해야한다. 이것을 보관 유지하는 MessageContext를 구축하는 방법의 예를 찾고 있습니다. – Dave1963

답변

1

MessageContextDefaultMessageContext 개체를 인스턴스화하여 만들 수 있습니다. 요청 WebServiceMessage은 테스트 지원 클래스 PayloadMessageCreator을 사용하여 만들 수 있습니다. 그러나 이것은 Spring-WS 2.x에서만 나타났습니다.

엔드 포인트 오브젝트는 무엇이든 될 수 있습니다. 이는 인터셉터가 수행하는 작업에 따라 다릅니다. 실제로 사용하지 않으면 null을 전달하면됩니다.

0

나는 동일한 문제를 가지고 있으며 부분적으로는 @ skaffman의 제안을 사용하여이를 파악할 수있었습니다.

기본적으로 나는 실제 데이터로 테스트하고 싶었던 사용자 지정 EndpointInterceptor를 가지고있어서 모든 것이 정확하다는 것을 알고있었습니다.

spring-ws-test 및 다른 spring-ws 종속성을 버전 2.0 이상으로 업그레이드해야합니다. 나는 PayloadMessageCreator와 다른 것을 사용했다.

final Source payload = new StreamSource(new StringReader(soapPayload)); 
SaajSoapMessageFactory saajSoapMessageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance()); 
WebServiceMessage requestPayload = new SoapEnvelopeMessageCreator(payload).createMessage(saajSoapMessageFactory); 
MessageContext messageContext = new DefaultMessageContext(requestPayload, saajSoapMessageFactory); 

soapPayload은 전체 비누 봉투의 문자열 값입니다. 이와 유사한

뭔가 :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
     ...fill in your custom headers here 
    </soapenv:Header> 
    <soapenv:Body><someRequest>...</someRequest></soapenv:Body> 
</soapenv:Envelope> 

당신은 분명히 귀하의 요청 페이로드, 어떤 네임 스페이스뿐만 아니라, 사용자 정의 헤더를 입력해야합니다.

인터셉터의 일부로 아무 것도하지 않았으므로 엔드 포인트 개체를 null로 설정했습니다.

관련 문제