我有一个非常简单的SOAP Web服务,我需要从Java客户端使用它。在不使用任何第三方库的情况下,最简单的方法是什么?要求是在每次调用ws之前从web.xml读取主机和端口。
答案 0 :(得分:23)
我可以推荐你的CXF库。使用它,您将有几个调用Web服务的选项:
使用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);
使用从WSDL生成的Java存根,使用wsdl2java。
如果你的服务器是使用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();
答案 1 :(得分:22)
根据您使用的JAVA版本,内置了一些JAX-WS。 JDK 6具有Java的JAX-WS标准实现,您可以使用它。
请参阅以下内容:
JAX-WS 2.1 and JAXB 2.1 is available in JDK 6 Update 4 release
Getting Started with JAX-WS Web Services(使用JDK内置JAX-WS部署和使用Web服务的教程)
答案 2 :(得分:8)
如果你可以放宽你的“没有第三方库”的要求,并且你有一个Web服务的WSDL,那么Axis让它变得非常简单。只需使用wsdl2java编译WSDL,就可以使用生成的Java类来使用Web服务。
答案 3 :(得分:1)
不使用任何第三方库?真正了解SOAP标准并学会爱SAX。
如果你不喜欢SAX,那么就要放弃你的第三方libs要求并使用StAX(用woodstox)代替。
这种方法可能是“最简单的”(考虑到没有第三方库的要求),但我认为它不会简单。