有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAXWS使用特定于实现的API(如CXF)调用Web服务

是否可以在Java中调用web服务,而不使用JAX-WSAPI,而是使用特定的运行时实现API,如特定于CXF的API

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

谢谢你


共 (2) 个答案

  1. # 1 楼答案

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

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

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

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

  2. # 2 楼答案

    您可以用普通XML构建请求,并执行SOAP请求。要构建XML结构,可以使用SoapUI,在这里可以导入WSDL,它为您提供XML输入结构。将其复制到java类中,在需要时附加请求参数并触发请求。您不需要任何Jax-WS-API。这种方法的唯一问题是需要为输入和输出编写XML解析器

    [update]不同的解决方案

    我使用JavaAPI来使用框架特性,但需要为给定的服务创建客户端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并添加到类路径