JAX-WS使用特定于实现的API(如CXF)调用Web服务

时间:2013-04-08 08:45:46

标签: java jax-ws cxf java-metro-framework

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

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

谢谢你

2 个答案:

答案 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对象。