参考:http://blog.tianya.cn/blogger/post_read.asp?BlogID=3362822&PostID=42752371
1、web service
简单的Web服务可以提供例如天气预报或者航班信息的服务。一旦部署了Web服务,其他的应用程序就可以发现和调用所部署的服务。
2、SOAP
SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。
SOAP 在 WEB 服务堆栈中的作用

3、WSDL
网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。为用户提供详细的接口说明书。
和SOAP关系:
4、Axis
Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能。
5、Axis发布
Axis支持两种web service的部署和开发,分别为:
1、Dynamic Invocation Interface (DII)
2、Dynamic Proxy方式
5.1、Dynamic Invocation Interface (DII)
这个也称之为即时发布,是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……"webapps"axis”目录下即可。
第一个程序简单的返回HELLO WORLD!
HelloWorld.java
public class HelloWorld {
<span style="white-space:pre"> </span>public String sayHello(){
<span style="white-space:pre"> </span>return "HELLO WORLD!";
<span style="white-space:pre"> </span>}
}
将HelloWorld.java拷贝到%TOMCAT_HOME%"webapps"axis下,然后将其改名为HelloWorld.jws,这样AXIS就自然将其发布了。现在写个客户端程序访问一下:
TestClient.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.rpc.ParameterMode;
public class TestClient{
public static void main(String [] args) throws Exception {
<span style="white-space:pre"> </span>String endpoint = "http://localhost/:" +"8080"+ "/axis/HelloWorld.jws";//指明服务所在位置
<span style="white-space:pre"> </span>Service service = new Service(); //创建一个Service实例,注意是必须的!
<span style="white-space:pre"> </span>Call call = (Call) service.createCall();//创建Call实例,也是必须的!
<span style="white-space:pre"> </span>call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置
<span style="white-space:pre"> </span>call.setOperationName( "sayHello" );//注意方法名与HelloWorld.java中一样!!
<span style="white-space:pre"> </span>String res = (String) call.invoke( new Object[] {} );//返回String,没有传入参数
<span style="white-space:pre"> </span>System.out.println( res );
}
}
5.2、Dynamic Proxy方式
将HelloWorld.java编译成HelloWorld.class,放到%TOMCAT_HOME%"webapps"axis"WEB-INF"classes下,再在该路径下新建一个deploy.wsdd文件,内容为:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
<parameter name="allowedMethods" value="sayHello"/>
<parameter name="className" value="HelloWorld"/>
</service>
</deployment>
然后打开浏览器http://localhost:8080/axis/servlet/AxisServlet,你就会看到你的服务已发布.
同样用客户端程序访问一下:(注意和上边的差别!!)
HelloClient.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloClient{
<span style="white-space:pre"> </span>public static void main(String [] args) throws Exception {
<span style="white-space:pre"> </span>String endpoint = "http://localhost/:" +"8080"+ "/axis/services/HelloWorld";//注意!差别仅仅在这里!!
<span style="white-space:pre"> </span>Service service = new Service();
<span style="white-space:pre"> </span>Call call = (Call) service.createCall();
<span style="white-space:pre"> </span>call.setTargetEndpointAddress( new java.net.URL(endpoint) );
<span style="white-space:pre"> </span>call.setOperationName("sayHello" );
<span style="white-space:pre"> </span>String res = (String) call.invoke( new Object[] {} );
<span style="white-space:pre"> </span>System.out.println( res );
<span style="white-space:pre"> </span>}
}
对于有自定义的参数的客户端调用方式如下:
String endpoint = "http://192.168.0.107/DataManager/services/User";
Service service= new Service();
Call call= (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName("addUser");
5.3、如果有多个自定义参数详见http://www.cnblogs.com/leslies2/archive/2012/09/07/leslies2Blog_java_axis.html