简单地使用Java中的Web服务
我有一个非常简单的SOAP Web服务,我需要从Java客户端使用。 不使用任何第三方库,最简单的方法是什么? 一个要求是在每次调用ws之前,从web.xml中读取主机和端口。
我可以推荐你的CXF库。 使用它你会有几个选项来调用Web服务:
-
使用dynamic代理进行调用(不需要使用wsdl2java创buildJava存根)。
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);
-
使用WSDL生成的Java存根,使用wsdl2java。
-
如果您的服务器是使用CXF创build的,则可以直接重用您的接口代码(而不是使用从您的接口创build的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();
根据您使用的是哪个版本的JAVA,其中内置了一些JAX-WS。 JDK 6具有Java的JAX-WS标准实现,您可以使用它。
请参阅以下内容:
-
JAX-WS 2.1和JAXB 2.1在JDK 6 Update 4发行版中提供
-
JAX-WS Web服务入门 (使用JDK内置的JAX-WS来部署和使用Web服务的教程)
如果您可以放松您的“第三方库”需求,并且您拥有Web服务的WSDL,那么Axis使其变得非常简单。 只需使用wsdl2java编译WSDL,就可以使用生成的Java类来使用Web服务。
不使用任何第三方库? 了解SOAP标准,学会喜欢SAX。
如果你不能爱SAX,那么请放弃你的第三方库的要求,而不是使用StAX(和woodstox)。
这种方法可能是“最简单的”(考虑到没有第三方库的要求),但我不认为这会很容易 。