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 을, 그래, 그래서 나는 혼란스러워.
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
이 질문에 감사 드리며, 저에게 많은 도움이되었습니다.이 코드를 예로 들자면 elduff가 WSA 네임 스페이스의 Submission 버전을 사용했다는 것을 지적하고자한다. 마지막 네임 스페이스는 AddressingConstants.Final.WSA_NAMESPACE를 통해 사용할 수 있습니다. 이것은 Axis 2 1.5.1을 사용하는 JAX-WS 2.1 (Metro) 서버의 클라이언트를 만들려고 할 때 필자와 관련이있다. 클라이언트는 WSA 헤더가 누락되었다고 불평했다. 이 문제는 Final.WSA_NAMESPACE를 사용하는 서버로 클라이언트에서 Submission.WSA_NAMESPACE를 사용하여 발생했습니다. –