一、创建服务器,此处使用JDK中自带的HttpServer做为Web Service服务器。
二、创建Web Service的实现类,并正确加上标注,这样系统会自动生成WSDL描述文件及包装类(Wrap Class)。
三、生成Web Service客户端的JAVA调用框架
调用 wsimport -p client -keep http://localhost:32768/ws?wsdl 便可能生成调用以上部署的Web Service的客户端代码,客户端代码包含以下java文件。
- JAXB的Object Factory,它是生成JAXB元素的工厂,我们需要调用它来创建message对象的JAXB映射,然后表达(marshall)成XML模型发送到服务器,反之当收到服务端的XML响应,我们通过它将XML解析(unmashall)成message对象;
- WSDL定义中message所对应的java类;
- Web Service接口,它是我们第二步创建的Web Service的本地接口;
- 服务类,通过此服务类我们可以获取Web Service的调用接口(即服务提供的操作集)
- Packet-info类提供实现类的包名与调用框架类的包名的映射。在第二步中实现类的包名是webservice,而调用wsimport时我们所指定的生成代码的包名是client。
四、调用
本例中输出结果为 "Hello, Lambert"
五、WS Client - Behind the scenes
JAXWS默认绑定类型为SOAP document而不是SOAP RPC,即消息仅通过XML进行封装。这样即使不通过工具生成客户端调用框架,我们也完全可以向服务端发送HTTP消息进行web service调用。
在浏览器显示的结果为:
结合四、五步,要实现WS的客户端调用,我们大致需要以下工作:
- 通过WSDL生成本地接口;
- 实现message消息到XML的映射,即将本地对象表达成XML模型,或将XML模型解析成本地对象;
- 向服务端发送请求,并取回结果。
- 实现调用接口的本地实现(Proxy),需要以上所产生XML模型与message(消息)的互相映射及消息的传输。
一次web service调用的过程包括:
- 通过本地接口获取调用方法
- 调用请求产生后,将调用请求表达成XML模型,并通过如HTTP Get/Post方式发往服务端,有返回值时需等待结果
- 当获取结果后,将此字符串表达的XML模型解析成本地对象,即返回值。