写代码容易,但是理解其中的原理和过程。
web service 本质就是XML的应用, 中间的传送的消息格式都是XML格式,这就屏蔽各种编程语言的差别。
就是说,只要支持XML解析的语言,就支持web service。
web service 的调用本质:
1) 客户端把调用的参数,转换为XML文档片段(SOAP消息, input)
2) 客户端通过网络把文档片段传给远程服务器。
3) 服务器接收XML文档片段。
4)服务器解析XML文档片段,提取其中的数据,并把数据转换为调用所需的参数。
5)服务器执行方法
6)得到方法的返回值,并将其转换为XML 文档片段(SOAP消息,ouput)
8)客户端接收文档片段,并解析,得到调用的数据。
Web service 的三个技术基础:
1、 WSDL
1) Web service 接口
1. types (标准的schema)
2.有N个方法(操作),就有2N的消息(Message),一个input和一个output
2)Web Service 实现
1. binding元素 -- N个更详细的operation
2. service -- 指定 web service 的服务器地址
2、
下面说客户端的调用:
上次我们生成的XML描述信息在这个地址:
http://10.5.82.195/hellows?wsdl
1、使用CXF的工具生成客户端代码。
在CXF的bin目录下有我们的生成工具 wsdl2java。 为了方便,可以把bin目录放在path环境变量下。
在eclipse中新建一个客户端工程。
打开CMD,进入到改工程的src目录下。
使用命令: wsdl2javahttp://10.5.82.195/hellows?wsdl
代码已生成。 刷新项目。
2、调用
自动生成的代码,包名和服务器的一致。 按理说,服务端用什么包名客户端是不会知道的。
但是别忘了,WSDL的描述文件里,命令空间是根据包名来命名的。 而客户端的又是根据描述文件生成的代码。
当然,就什么包名是无所谓的。
新建一个ClientTest类测试,调用也很简单。
public class ClientTest {
/**
* @param args
*/
public static void main(String[] args) {
HelloWS factory = new HelloWS();
Hello hello = factory.getHelloImplPort();
System.out.println(hello.sayHello("dedede"));
}
}