2010-03-26 3 views
7

All, Axis2.1.5에서 웹 서비스 클라이언트를 호출하는 Junit 테스트를 작성하려고하는데 WS-Addressing을 사용하도록 정확히 설정하는 방법에 대해 혼란스러워합니다.Axis2 클라이언트에서 WS-Addressing을 올바르게 사용하려면 어떻게해야합니까?

wsdl2java를 사용하여 클라이언트 스텁을 생성했으며 axis2x 바이너리 배포에서 axis2.xml 및 modules 리포지토리를 사용하고 있습니다.

WS-Addressing의 MemberSubmission 버전을 사용해야한다는 것을 알고 있습니다. 올바르게 설정했는데 (옵션 사용) 헤더가 올바르게 생성되지 않은 것 같습니다. (SOAPMonitor 모듈을 사용하는 방법을 이해할 수 없기 때문에 '보이는 것'이라고 말합니다. 나는 그 어떤 조언도 환영합니다!).

그러나 필자의 주된 혼란은 Addressing 모듈에 정확히 '참여'하기 위해 필요한 것입니다. 주소 지정 모듈에 대한 참조가있는 axis2.xml 파일로 ConfigurationContext를 설정하는 것으로 충분합니까? 이렇게? : 위와 같이 설정 내 옵션을

//standard out of the box axis2 configs 
ConfigurationContext myConfigContext = ConfigurationContextFactory 
    .createConfigurationContextFromFileSystem("C:/devapps/axis2-1.5.1/repository","C:/devapps/axis2-1.5.1/conf/axis2.xml"); 

    Options options = new Options(); 
    EndpointReference targetEPR = new EndpointReference(
    "https://host:port/service.asmx"); 

    options.setTo(targetEPR); 

       //I believe this is what I'm supposed to do to specify the 
    //MemberSubmission version of WS-Addressing 
    options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, 
    AddressingConstants.Submission.WSA_NAMESPACE); 
    //No idea of this is needed or not. 
    options.setProperty(AddressingConstants.INCLUDE_OPTIONAL_HEADERS, 
    Boolean.TRUE); 
    options.activate(myConfigContext); 
    options.setAction("someAction"); 

    CaseDetailsServiceStub stub = new CaseDetailsServiceStub(
    "https://host:port/service.asmx"); 
    stub._getServiceClient().setOptions(options); 

    //I'm calling this from a Junit test 
    assertNotNull(stub.someAction(someParam)); 

는 모듈 axis2.xml에서로드지고 로그 파일에서 볼 수 있습니다 :

[INFO] Deploying module: addressing-1.5.1 - file:/C:/devapps/axis2-1.5.1/repository/modules/addressing-1.5.1.mar 

하지만 내가 받고 있어요 생각하지 않는다 모든 주소 지정 헤더. 나는이 시점에서 다시 서버에서 얻을 오류는 말한다 :

필요 궁극적 인 수신자 헤더 http://schemas.xmlsoap.org/ws/2004/08/addressing:Action 하지만 메시지 존재하지 않습니다.

그래서 일부 문서에서는 '매력적인'모듈을 참조하는 것으로 나타났습니다.

stub._getServiceClient().engageModule("addressing"); 

를 I라는 오류 얻을 :

수 없습니다 모듈을 참여를 : 내 코드에 줄을 추가하고, 그래도 내 클래스 경로에 주소-1.5.1.mar을 추가하려고하면 주소 org.apache.axis2.AxisFault : 모듈 관여 할 수 없습니다 : 이상 로그에

없음 정보 또는 스택 추적 org.apache.axis2.client.ServiceClient.engageModule (ServiceClient.java:358)에서 soapmonitor 을, 그래, 그래서 나는 혼란스러워.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

+0

이 질문에 감사 드리며, 저에게 많은 도움이되었습니다.이 코드를 예로 들자면 elduff가 WSA 네임 스페이스의 Submission 버전을 사용했다는 것을 지적하고자한다. 마지막 네임 스페이스는 AddressingConstants.Final.WSA_NAMESPACE를 통해 사용할 수 있습니다. 이것은 Axis 2 1.5.1을 사용하는 JAX-WS 2.1 (Metro) 서버의 클라이언트를 만들려고 할 때 필자와 관련이있다. 클라이언트는 WSA 헤더가 누락되었다고 불평했다. 이 문제는 Final.WSA_NAMESPACE를 사용하는 서버로 클라이언트에서 Submission.WSA_NAMESPACE를 사용하여 발생했습니다. –

답변

7

addressign.mar 및 sopamoniter.mar를 프로젝트의 lib 또는 classpath에 넣습니다.

<dependency> 
    <groupId>org.apache.axis2</groupId> 
    <artifactId>addressing</artifactId> 
    <version>1.6.2</version> 
    <classifier>classpath-module</classifier> 
</dependency> 
MyServiceStub stub = new MyServiceStub(targetEndpoint); 
stub._getServiceClient().engageModule("addressing"); 

내가 어떤 classpath-module 표시되지 않습니다 : 내 Maven 프로젝트에서

+0

안녕 Deepak,이 수정 프로그램을 어떤 운영 체제에서 사용했는지 알려주십시오. Windows (개발 환경)가 아닌 Linux OS (테스트 환경)에서이 문제에 직면하고 있습니다. –

관련 문제