【发布时间】:2008-11-15 00:18:00
【问题描述】:
我有一个非常简单的 SOAP Web 服务,我需要从 Java 客户端使用它。在不使用任何第三方库的情况下完成此任务的最简单方法是什么?要求是在每次调用 ws 之前从 web.xml 中读取主机和端口。
【问题讨论】:
标签: java web-services soap
我有一个非常简单的 SOAP Web 服务,我需要从 Java 客户端使用它。在不使用任何第三方库的情况下完成此任务的最简单方法是什么?要求是在每次调用 ws 之前从 web.xml 中读取主机和端口。
【问题讨论】:
标签: java web-services soap
我可以向您推荐 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();
【讨论】:
根据您使用的 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 服务的教程)
【讨论】:
如果您可以放宽“无 3rd 方库”的要求,并且您有一个用于 Web 服务的 WSDL,那么 Axis 会非常容易。只需使用 wsdl2java 编译 WSDL,就可以使用生成的 Java 类来使用 Web 服务。
【讨论】:
不使用任何第三方库?真正了解 SOAP 标准并学会爱上 SAX。
如果您不喜欢 SAX,那么请放宽您对无第三方库的要求并改用 StAX(带有 woodstox)。
这种方法可能是“最简单的”(考虑到无第三方库的要求),但我认为它不会简单。
【讨论】:
s certainly possibly, but I wouldnt 推荐它。在没有 SOAP 库的情况下读取响应也是如此。