简单地使用Java中的web服务

简单地使用Java中的web服务,java,web-services,soap,Java,Web Services,Soap,我有一个非常简单的soapweb服务,需要从Java客户机使用它。在不使用任何第三方库的情况下,最简单的方法是什么?要求在每次调用ws之前从web.xml读取主机和端口。,而不使用任何第三方库?深入了解SOAP标准,并学会热爱SAX 如果您不喜欢SAX,那么可以放宽您的无第三方libs要求,改用StAX(与woodstox一起使用) 这种方法可能是“最简单的”(考虑到没有第三方libs的要求),但我认为这并不容易。如果您可以放松“没有第三方库”的要求,并且您有一个用于web服务的WSDL,那么A

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

,而不使用任何第三方库?深入了解SOAP标准,并学会热爱SAX

如果您不喜欢SAX,那么可以放宽您的无第三方libs要求,改用StAX(与woodstox一起使用)


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

如果您可以放松“没有第三方库”的要求,并且您有一个用于web服务的WSDL,那么Axis会让它变得非常简单。只需使用wsdl2java编译WSDL,您就可以使用生成的Java类来使用web服务。

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

见下文:

  • (使用JDK内置JAX-WS部署和使用web服务的教程)


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

  • 用于调用(不需要使用wsdl2java创建Java存根)

  • 使用从WSDL生成的Java存根,使用wsdl2java

  • 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);
    
  • 如果您的服务器是使用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();
    

    我不明白为什么这么难?当然,您所要做的就是使用stringbuffer构造请求,打开一个连接,然后将请求填充到连接中并等待响应。或者我遗漏了什么?您可能遗漏的是使用StringBuffer构造请求的困难/繁琐。当然有可能,但我不推荐。在没有SOAP库的情况下读取响应也是如此。JAX-WS看起来很容易使用,但是如何使用它从web.config文件读取主机名?DynamicClient工厂是否要求您首先创建存根?不,您可以从wsdl文件动态执行方法,传递参数,获得结果(标量或xml对象).问题明确指出“不使用任何第三方库”。