Java 如何在Axis2客户端中正确使用WS-Addressing?

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模块工作——我

全部,, 我试图编写一个Junit测试来调用Axis2.1.5中的Web服务客户机,但我对如何准确地将其设置为使用WS-Addressing感到困惑

我已经使用wsdl2java生成了一个客户端存根,并且使用了axis2二进制发行版中的axis2.xml和模块存储库

我知道我需要使用WS-Addressing的MemberSubmission版本,并且我认为我已经正确地设置了它(使用选项),但是标题似乎没有正确生成。(我之所以说‘似乎’,是因为我也不知道如何让SOAPMonitor模块工作——我也欢迎任何关于这方面的提示!)

不过,我的主要困惑是,究竟需要什么来“使用”寻址模块。使用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
但我想我没有收到任何地址头。此时我从服务器返回的错误是:

标题 最终收件人是必需的,但 消息中不存在

所以,我也看到了一些参考“参与”模块的文档。当我尝试将这一行添加到我的代码中并将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(开发环境)中