【问题标题】:Simply consuming a web service in Java简单地使用 Java 中的 Web 服务
【发布时间】:2008-11-15 00:18:00
【问题描述】:

我有一个非常简单的 SOAP Web 服务,我需要从 Java 客户端使用它。在不使用任何第三方库的情况下完成此任务的最简单方法是什么?要求是在每次调用 ws 之前从 web.xml 中读取主机和端口。

【问题讨论】:

    标签: java web-services soap


    【解决方案1】:

    我可以向您推荐 CXF 库。使用它,您将有多种调用 Web 服务的选项:

    1. 使用dynamic proxy 进行调用(不需要使用wsdl2java 制作Java 存根)。

      DynamicClientFactory dcf = DynamicClientFactory.newInstance();
      Client client = dcf.createClient("http://admin:password@localhost:8080"+
                                       "/services/MyService?wsdl");
      Object[] a = client.invoke("test", "");
      System.out.println(a);
      
    2. 使用从 WSDL 生成的 Java 存根,使用 wsdl2java。

    3. 如果您的服务器是使用 CXF 创建的,您可以直接重用您的界面代码(而不是在从您的界面创建的 WSDL 上使用 wsdl2java!)

    对于 #2 和 #3,以下代码举例说明了 CXF 的用法:

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setAddress("http://admin:password@localhost:8080/services/MyService");
    factory.setServiceClass(ITest.class);
    ITest client = (ITest) factory.create();
    client.test();
    

    【讨论】:

    • DynamicClientFactory 是否要求您先创建存根?
    • 不,您可以从 wsdl 文件中动态执行方法,传递参数,得到结果(标量或 xml 对象)。
    • 问题明确指出“不使用任何第三方库”。
    【解决方案2】:

    根据您使用的 JAVA 版本,其中内置了一些 JAX-WS。 JDK 6 具有 Java 的 JAX-WS 标准实现,您可以直接使用它。

    请参阅以下内容:

    【讨论】:

    • JAX-WS 看起来确实很容易使用,但是如何使用它从 web.config 文件中读取主机名呢?
    【解决方案3】:

    如果您可以放宽“无 3rd 方库”的要求,并且您有一个用于 Web 服务的 WSDL,那么 Axis 会非常容易。只需使用 wsdl2java 编译 WSDL,就可以使用生成的 Java 类来使用 Web 服务。

    【讨论】:

      【解决方案4】:

      不使用任何第三方库?真正了解 SOAP 标准并学会爱上 SAX。

      如果您不喜欢 SAX,那么请放宽您对无第三方库的要求并改用 StAX(带有 woodstox)。

      这种方法可能是“最简单的”(考虑到无第三方库的要求),但我认为它不会简单

      【讨论】:

      • 我不明白为什么会这么难?当然,您所要做的就是使用字符串缓冲区构造请求,打开一个连接,然后将请求塞入连接并等待响应。还是我在这里遗漏了什么?
      • 您可能缺少的是使用 StringBuffer 构造请求的困难/乏味。它s certainly possibly, but I wouldnt 推荐它。在没有 SOAP 库的情况下读取响应也是如此。
      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2013-04-19
      • 1970-01-01
      • 2017-05-16
      • 2010-10-19
      • 1970-01-01
      相关资源
      最近更新 更多