当前位置: 首页 > 面试题库 >

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

向嘉誉
2023-03-14
问题内容

所有,我都试图编写一个在Axis2.1.5中调用Web Service客户端的Junit测试,而对于如何准确地将其设置为使用WS-
Addressing感到困惑。

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

我知道我需要使用WS-Addressing的MemberSubmission版本,并且我 认为
我已经正确设置了该名称(使用Options),但是标题似乎未正确生成。(我之所以说“似乎”,是因为我也不知道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

但我认为我没有得到任何寻址头。我此时从html" target="_blank">服务器返回的错误表示:

标头
http://schemas.xmlsoap.org/ws/2004/08/addressing:
最终收件人的操作是必需的,但消息中不存在。

因此,我也看到一些文档引用了“参与”模块。当我尝试将此行添加到我的代码并将addressing-1.5.1.mar添加到我的类路径时,尽管:

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

我收到一条错误消息:

无法使用模块:寻址org.apache.axis2.AxisFault:无法使用模块:位于org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:358)的soapmonitor

但是,日志中没有其他信息或堆栈跟踪,这令我感到困惑。

关于我在做什么错的任何想法吗?


问题答案:

将addressign.mar和sopamoniter.mar放入项目的lib或类路径中。它对我有用,从axis2套件中找到mar



 类似资料:
  • 我目前正在玩我的球衣Rest服务。为了更好地概述给定的服务(描述、类型等),我大量使用了swagger(swagger-jersey2-jaxrs)。因此,我能够生成我的服务描述(swagger.json),我可以通过swagger ui查看和探索它们。 现在我需要创建一些客户机来使用这些服务。我遇到了swagger codegen cli,它是一个很好的工具,可以生成您的客户端和许多不同的语言(

  • 我有一个运行在j2ee服务器(jboss 4.0.4)上的axis2 web服务客户端,该服务器一直在使用tomcat上托管的web服务。最近tomcat管理员打开了TLS,现在我的axis2客户端无法工作。如何为axis2客户端打开TLS? 谢谢你的帮助!

  • 我正在尝试调用一个web服务,并使用MTOM向我的请求添加一个附件。在我调用的web服务上启用了Mtom,并且我可以使用SOAPUI正常调用该服务。 请求的模式如下所示; 然后在我的java代码中创建jaxb请求对象并尝试从字符串中设置内容; 我已经将我的封送器设置为启用了mtom(尽管我不确定这在客户端上是必要的); 但我得到以下例外情况; 有没有人知道我做错了什么,或者有没有人能给我演示一个如

  • 我正在努力做一些基本的事情,但我的头脑还没有完全清醒过来。我有一个spring boot应用程序,它应该公开一个rest url。 我是这样做的: 正如您所见,它使用的是另一个服务,我正试图用一个外部客户机实现该服务: 界面看起来像: 当MdmhClient在调用: 我知道要解决这个问题,我需要将证书导入jre。我正在运行Intellij IDE,并将项目的jdk路径设置为: 我还通过firefo

  • 我尝试为我的网站提供文件上传/下载服务,并且尝试使用openstack中的对象存储。问题是,我通过php和openstack PHPSDK做这件事没有问题,但是当我试图通过一些javascript做这件事时,我找不到一个好的sdk或方法。我没有使用node,我有一个php服务器和一个javascript客户端。我想直接从javascript客户端上传或下载文件。我不希望文件通过php服务器传输。我

  • 创建okhttp3客户端,使用sni地址访问web服务器,但握手失败,错误消息为“javax.net.ssl.SSLHandShakeException:握手期间远程主机关闭连接”。 有人知道如何在okhttp3客户端代码中使用sni地址吗?