【问题标题】:Create a SOAP Webservice Client Application in Java用 Java 创建 SOAP Web 服务客户端应用程序
【发布时间】:2013-04-16 11:15:00
【问题描述】:

我已经在 Eclipse 中使用 Apache CXF 在 Java 中创建了一个 Webservice,现在我必须创建一个 WebService 客户端应用程序来使用和调用它。 我一直在寻找一种方法,我发现Client总是依赖于服务器的Java Class。

问题是我必须在其他 Java 环境中开发客户端类。我的问题是:有没有办法开发一个独立于 web 服务服务器包的客户端类,只使用 WSDL 文件?

谢谢你:)

【问题讨论】:

  • 不确定我是否理解您想要实现的目标,但有一些实用程序可用于从 wsdl 生成 Web 服务客户端。 wsimport 是标准 jdk 的一部分(如果我没记错的话来自 Java 6)
  • 您可以使用 cxf wsdl2java 命令或使用 jax-ws wsimport 通过 wsdl 生成类
  • 我希望你问过 NetBeans(右键单击项目,新建,Web 服务客户端,来自 WSDL,完成)无论如何 - wsimport 足以解决你的问题。

标签: java web-services soap client cxf


【解决方案1】:

您可以借助 Apache CXF Link wsdl 到 java 工具。 wsdl2java - 获取 WSDL 文档并生成完全注释的 Java 代码,从中实现服务。

你也可以借助 eclipse 插件。

Eclipse plugin to generate java class

【讨论】:

    【解决方案2】:

    您可以将请求作为 XML 请求发送到 Web 服务 API。只有您需要使用正确的标题和正文来构造 SOAP 投诉请求。通过使用 SoapUI,您可以生成 XML 请求结构,然后在您的应用程序中重用它。

    如果你使用 Jax-RS(REST APIs),即使是 http 方法也可以

    [更新]

    如果您对如何创建客户端类感到困惑,那么您将遵循此方法

    1. 使用 wsimport

      >  http : //hostname :port/wsdl.url on command line to create proxy classes
      
    2. 创建jar文件生成代理类

    3. 将 jar 文件添加到类路径
    4. 使用Service API构造端点,然后调用服务。
    5. 下面给出了示例测试客户端。

      try {
      
          URL wsdlURL = new URL("http://localhost:8082/cxf/services/yourservice?wsdl");
      
          QName SERVICE_NAME = new QName("http://package.name/","PORTNAme");
      
          Service service = Service.create(wsdlURL, SERVICE_NAME);
      
          client = service.getPort(PORTInterface.class);
      
          client.executeYourMethod()
      
      } catch (Exception e) {
      
          // TODO Auto-generated catch block
      
          e.printStackTrace();
      
      }
      

    1. 网址是 WSDL 网址
    2. 要创建 QName,需要提供服务接口的命名空间(通常是包的名称)和端口名称,您可以在绑定部分的 WSDL 中找到。
    3. 还需要识别代理类(名称将类似于端口名称)

    干杯 萨西斯

    【讨论】:

    • 谢谢 :) 为什么要创建代理类?我使用过 wsimport :wsimport -keep -verbose http://127.0.0.1:8080/MCINTWebservice/services/McintWebservicePort?wsdl 它为我生成了一些类..
    • 从 wsimport 生成的只是代理类和依赖项来访问您的服务。您需要创建代理(您的服务)实例来调用您的服务方法/
    • 谢谢我明白了。我已经创建了罐子,但请我不明白Use Service API to construct the end point, and then invoke service.
    • 创建客户端 jar 后,将其添加到客户端项目的构建路径中。然后你为了调用服务方法,你需要创建代理实例。您可以重复使用我提供的示例。更新了我上面的答案
    • 谢谢。我的包是:com.mcint.ws,所以它将是http://ws.mcint.com,对于服务类,我必须使用代理一还是本机类 Java? PortInterface 会是代理类中的接口吗?最后是 PORTName,它是一个字段还是一个属性?它是什么 ? (对不起,我是 SOAP weservice 的新手)谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多