简单地使用Java中的Web服务

Dea*_*ano 35 java soap web-services

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

Fox*_*BOA 23

我可以推荐你的CXF库.使用它,您将有几个调用Web服务的选项:

  1. 使用动态代理进行调用(不需要使用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);
    
    Run Code Online (Sandbox Code Playgroud)
  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();
Run Code Online (Sandbox Code Playgroud)

  • 不,您可以从wsdl文件动态执行方法,传递参数,获得结果(标量或xml对象). (2认同)

anj*_*anb 22

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

请参阅以下内容:


Dón*_*nal 8

如果你可以放宽你的"没有第三方库"的要求,并且你有一个Web服务的WSDL,那么Axis让它变得非常简单.只需使用wsdl2java编译WSDL,就可以使用生成的Java类来使用Web服务.


Chr*_*est 1

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

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

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

  • 您可能会忽略使用 StringBuffer 构造请求的困难/乏味。这当然有可能,但我不推荐它。在没有 SOAP 库的情况下读取响应也是如此。 (5认同)