Java 如何在Axis2客户端中正确使用WS-Addressing?
全部,, 我试图编写一个Junit测试来调用Axis2.1.5中的Web服务客户机,但我对如何准确地将其设置为使用WS-Addressing感到困惑 我已经使用wsdl2java生成了一个客户端存根,并且使用了axis2二进制发行版中的axis2.xml和模块存储库 我知道我需要使用WS-Addressing的MemberSubmission版本,并且我认为我已经正确地设置了它(使用选项),但是标题似乎没有正确生成。(我之所以说‘似乎’,是因为我也不知道如何让SOAPMonitor模块工作——我也欢迎任何关于这方面的提示!) 不过,我的主要困惑是,究竟需要什么来“使用”寻址模块。使用axis2.xml文件设置ConfigurationContext是否足够,该文件包含对寻址模块的引用?像这样Java 如何在Axis2客户端中正确使用WS-Addressing?,java,axis2,ws-addressing,Java,Axis2,Ws Addressing,全部,, 我试图编写一个Junit测试来调用Axis2.1.5中的Web服务客户机,但我对如何准确地将其设置为使用WS-Addressing感到困惑 我已经使用wsdl2java生成了一个客户端存根,并且使用了axis2二进制发行版中的axis2.xml和模块存储库 我知道我需要使用WS-Addressing的MemberSubmission版本,并且我认为我已经正确地设置了它(使用选项),但是标题似乎没有正确生成。(我之所以说‘似乎’,是因为我也不知道如何让SOAPMonitor模块工作——我
//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
但我想我没有收到任何地址头。此时我从服务器返回的错误是:
标题
最终收件人是必需的,但
消息中不存在
所以,我也看到了一些参考“参与”模块的文档。当我尝试将这一行添加到我的代码中并将addressing-1.5.1.mar添加到我的类路径时,尽管:
stub._getServiceClient().engageModule("addressing");
我得到一个错误,上面写着:
无法接合模块:寻址
org.apache.axis2.AxisFault:无法启用模块:soapmonitor
位于org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:358)
日志中没有其他信息或堆栈跟踪,但是,这让我感到困惑
有没有关于我做错了什么的想法?将addressign.mar和sopamoniter.mar放入项目的lib或classpath中。 它对我有用
从axis2工具包中查找mar在我的Maven项目中,我必须声明对工件的附加依赖:
org.apache.axis2
,不过。谢谢你提出这个问题,它对我帮助很大。对于那些可能使用此代码作为示例的人,我想指出,elduff使用了WSA名称空间的提交版本。最终名称空间可通过AddressingConstants.final.WSA_名称空间获得。当我尝试使用Axis2 1.5.1为JAX-WS2.1(Metro)服务器创建客户机时,这与我有关。客户不断抱怨WSA头丢失。问题是由于服务器使用Final.WSA_NAMESPACE.Hi Deepak时在客户端中使用Submission.WSA_NAMESPACE引起的。请告诉我您是在哪个操作系统中进行此修复的?我在Linux操作系统(测试环境)中面临这个问题,而不是在Windows(开发环境)中