0

是否可以在不使用 JAX-WS API 而是使用特定运行时实现 API(例如 CXF 特定 API)的情况下在 Java 中调用 Web 服务?

当我使用 JAX-WS API 时,我的类路径上有 Metro 和它导致的问题,所以我想指定确切的 JAX-WS API 实现以在调用服务时动态使用

感谢你

4

2 回答 2

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 并添加到类路径

于 2013-04-08T09:04:13.430 回答
0

最有可能的是,所有 JAX-WS 实现都有某种专有 API,可用于创建使用其特定实现并绕过 JAX-WS 提供者发现机制的服务。在大多数情况下,发现的 Provider 很可能是这些 API 的包装器。

对于客户端的 CXF,这将是 JaxWsProxyFactoryBean:

http://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.html

可用于从 JAX-WS 生成的接口创建代理对象。

于 2013-04-08T13:02:45.763 回答