是否可以在不使用JAX-WS API的情况下使用Java调用Web服务,而是使用特定的运行时实现API(如CXF特定的API)?
我在我的类路径上有Metro,当我使用JAX-WS API时会导致问题,因此我想指定在调用服务时动态使用的确切JAX-WS API实现
谢谢你
答案 0 :(得分:0)
您可以使用纯XML构建请求并执行SOAP请求。要构建XML结构,您可以使用SoapUI,您可以在其中导入WSDL,它为您提供xml输入结构。将其复制到java类中,在必要时附加请求参数并触发请求。您不需要任何Jax-WS API。只有这个方法的问题是你需要为输入和输出编写XML解析器
[更新]不同解决方案
我使用Java API来使用框架功能,但是需要为给定的服务创建客户端jar并添加到类路径。
URL wsdlURL = new URL("http://localhost/myweb/services/xyz_services?wsdl");
QName SERVICE_NAME = new QName("http://service.sa.com/","portname");
Service service = Service.create(wsdlURL, SERVICE_NAME);
TestService client = service.getPort(TestService.class);
client.execute();
如果您的服务如下所示
package com.sa.service;
Inteface TestService{
public void execute();
}
您可以从命令行使用wsimport
(Java工具)创建客户端类,然后将它们jar并添加到类路径
答案 1 :(得分:0)
最有可能的是,所有JAX-WS实现都有某种专有API,可用于创建将使用其特定实现并绕过JAX-WS提供程序发现机制的服务。在大多数情况下,发现的提供程序可能是这些API的包装器。
对于客户端的CXF,那就是JaxWsProxyFactoryBean:
http://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.html
可用于从JAX-WS生成的接口创建Proxy对象。