使用Axis开发WebService
[color=blue][b]1.下载并安装Axis[/b][/color]
1)登陆[url]http://axis.apache.org/axis/[/url]站点下载Axis
下载axis-bin-1_4.zip,解压后的目录结构如下:
[img]http://dl.iteye.com/upload/attachment/486261/3e38e0b5-fa84-38d9-8d95-55f159d3559a.png[/img]
2)安装Axis
首先要成功的安装Tomcat,然后将下载的Axis目录下面的webapps中的axis的
整个文件夹全部拷贝到Tomcat安装目录的Webapps下面
启动Tomcat,在浏览器中输入http://localhost:8080/axis之后
显示的界面如下:
[img]http://dl.iteye.com/upload/attachment/486306/051c2707-5104-334d-a981-2d146ca5c015.png[/img]
Axis安装完毕。
[color=blue][b]2.开发WebService[/b][/color]
[color=blue][b]1)即时发布的WebService[/b][/color]
即时发布提供了一种非常简单的发布方式,发布者只要有Java源代码,然后把其后缀名改成jws,拷贝到%Tomcat_HOME%\webapps\axis下即完成了发布工作。
[b]a)服务端代码:文件名SayHelloServer.java[/b]
把SayHelloServer.java文件改为SayHelloServer.jws然后拷贝到%Tomcat_HOME%\webapps\axis目录下,启动Tomcat后访问http://locahost:8080/axis/SayHelloServer.jws可以看到Click to see the WSDL的超链接
[img]http://dl.iteye.com/upload/attachment/486332/40d5b3ee-c428-3ef2-bd4e-f7a3b7895996.png[/img]
说明服务器端已经发布成功,下面开始编写Client端代码。
[b]b)客户端代码:[/b]
执行客户端的代码结果如下:
[img]http://dl.iteye.com/upload/attachment/486334/04eab598-f352-3615-b1f3-988cf3679092.png[/img]
[color=red][b]总结:即时发布很简单,但是有很多弊端,假如你现在只有.class或者一个jar包,jws就不再能满足你的需求了,最重要的是即时发布不支持带包的类。[/b][/color]
[color=blue][b]2)定制发布的WebService[/b][/color]
定制发布比即时发布更加繁琐和复杂,但是换来的是更大的灵活性。定制发布需要你自己编写一个WSDD(Web Service Deployment Descriptor)文件。
[b]a)服务器端代码:[/b]
这是一个带包的很简单的类,编译好之后将class文件拷贝到%Tomcat_HOME%\webapps\axis\WEB-INF\classes目录下
[b]b)接下来就是编写发布文件deploy.wsdd[/b],在%TOMCAT_HOME%\webapps\axis\WEB-INF目录下建立这个文件并且在其中添加如下内容:
这个wsdd文件是一个标准的XML文件,包含三个元素:
<deployment>元素制定了wsdd所用的XML命名空间,是这个文件的根。
<service>元素制定了一项SOAP服务。它有两个属性。name指定了这个服务的唯一标志符,provider指定了实现的语言及服务方式。一个wsdd文件可能有多个<service>元素。
<parameter>指定了服务详细信息,是一组name/value对应的值。其中,clcssName指定了实现这个服务的类的名字,allowedMethods指定了这个服务暴露的方法列表。
其中的com.wl.webservice.test是包的名称。
打开cmd命令窗口,进入%Tomcat_HOME%\webapps\axis\WEB-INF目录下面输入如下命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService deploy.wsdd
或者
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
执行结果如下:
[img]http://dl.iteye.com/upload/attachment/486380/e8cf570a-6d28-38f7-8d43-edf1a212c6ab.png[/img]
控制台返回Processing file deploy.wsdd 和Done processing 说明发布成功。
并且会在同一级别目录下生成一个service-config.wsdd文件。
发布成功之后,可以通过访问http://localhost:8080/axis/servlet/AxisServlet来查看所有的定制发布的服务。
但是我在通过http://localhost:8080/axis/servlet/AxisServlet查看的时候,页面报一些错误:
[img]http://dl.iteye.com/upload/attachment/486413/587271bb-2a1c-3768-b548-45f969ba5f0e.png[/img]
出错的原因是:我创建的这个HelloWorldWsdd服务是有包名称com.wl.webservice.test
解决方法:在%Tomcat_HOME%\webapps\axis\WEB-INF\classes下面创建目录com,在com下创建目录wl,在wl下创建目录webservice,在webervice下创建目录test,最后把HelloWorldWsdd.class文件再 拷贝到test目录下面。
重新http://localhost:8080/axis/servlet/AxisServlet查看结果:
[img]http://dl.iteye.com/upload/attachment/486415/bceb179c-ff6b-3703-bbf2-f54bb4c7ccba.png[/img]
[color=red]备注:发布deploy.wsdd可能会出现的问题:[/color]
I)axis所需要的Jar包如下:
[img]http://dl.iteye.com/upload/attachment/486396/309e91b1-370c-336a-9471-8252438685f8.png[/img]
在部署deploy.wsdd的时候会报一个Unable to find required classes的信息,具体:
[img]http://dl.iteye.com/upload/attachment/486398/ed48b578-47ea-35a4-829a-74cfd5fddea1.png[/img]
但是影响不大,要是去掉这个警告信息的话,还需要一个Jar包mail.jar,从相关网站下载后拷贝到%Tomcat_HOME%\webapps\axis\WEB-INF\lib下面,再次重新部署deploy.wsdd就不会再报上面的警告信息了。
参考:[url]http://blog.csdn.net/foamflower/archive/2008/09/08/2897501.aspx[/url]
II)在部署deploy.wsdd的时候Tomcat服务器需要开启,否则会报异常信息:
[img]http://dl.iteye.com/upload/attachment/486407/a25bef59-4b50-31e5-94b0-84ba849395f3.png[/img]
[b]c)客户端代码如下:[/b]
执行客户端代码结果如下:
[img]http://dl.iteye.com/upload/attachment/486388/78b19676-8d73-3bee-9b3b-a2f05f4ceec4.png[/img]
[color=blue][b]3.取消发布一个WebService[/b][/color]
取消一个已经发布的WebService很简单,在发布的时候有个deploy.wsdd文件,那在取消发布的时候需要一个undeploy.wsdd文件即可。
将这个文件拷贝到%Tomcat_HOME%\webapps\axis\WEB-INF目录下,然后再控制台输入命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd 运行结果:
[img]http://dl.iteye.com/upload/attachment/486419/057db302-0c4e-30e0-81c9-48c186280a5b.png[/img]
[color=blue][b]1.下载并安装Axis[/b][/color]
1)登陆[url]http://axis.apache.org/axis/[/url]站点下载Axis
下载axis-bin-1_4.zip,解压后的目录结构如下:
[img]http://dl.iteye.com/upload/attachment/486261/3e38e0b5-fa84-38d9-8d95-55f159d3559a.png[/img]
2)安装Axis
首先要成功的安装Tomcat,然后将下载的Axis目录下面的webapps中的axis的
整个文件夹全部拷贝到Tomcat安装目录的Webapps下面
启动Tomcat,在浏览器中输入http://localhost:8080/axis之后
显示的界面如下:
[img]http://dl.iteye.com/upload/attachment/486306/051c2707-5104-334d-a981-2d146ca5c015.png[/img]
Axis安装完毕。
[color=blue][b]2.开发WebService[/b][/color]
[color=blue][b]1)即时发布的WebService[/b][/color]
即时发布提供了一种非常简单的发布方式,发布者只要有Java源代码,然后把其后缀名改成jws,拷贝到%Tomcat_HOME%\webapps\axis下即完成了发布工作。
[b]a)服务端代码:文件名SayHelloServer.java[/b]
public class SayHelloServer {
public String getName(String name){
return "hello "+name;
}
}
把SayHelloServer.java文件改为SayHelloServer.jws然后拷贝到%Tomcat_HOME%\webapps\axis目录下,启动Tomcat后访问http://locahost:8080/axis/SayHelloServer.jws可以看到Click to see the WSDL的超链接
[img]http://dl.iteye.com/upload/attachment/486332/40d5b3ee-c428-3ef2-bd4e-f7a3b7895996.png[/img]
说明服务器端已经发布成功,下面开始编写Client端代码。
[b]b)客户端代码:[/b]
package com.wl.webservice.test;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class SayHelloClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String endpoint="http://localhost:8080/axis/TestClient.jws";
Service service=new Service();
Call call=null;
call=(Call)service.createCall();
call.setOperationName(new QName(endpoint,"getName"));
call.setTargetEndpointAddress(new java.net.URL(endpoint));
String ret=(String)call.invoke(new Object[]{"zhangsan"});
System.out.println("return value is "+ret);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行客户端的代码结果如下:
[img]http://dl.iteye.com/upload/attachment/486334/04eab598-f352-3615-b1f3-988cf3679092.png[/img]
[color=red][b]总结:即时发布很简单,但是有很多弊端,假如你现在只有.class或者一个jar包,jws就不再能满足你的需求了,最重要的是即时发布不支持带包的类。[/b][/color]
[color=blue][b]2)定制发布的WebService[/b][/color]
定制发布比即时发布更加繁琐和复杂,但是换来的是更大的灵活性。定制发布需要你自己编写一个WSDD(Web Service Deployment Descriptor)文件。
[b]a)服务器端代码:[/b]
package com.wl.webservice.test;
public class HelloWorldWsdd {
public String hello(String name){
return "hello "+name;
}
}
这是一个带包的很简单的类,编译好之后将class文件拷贝到%Tomcat_HOME%\webapps\axis\WEB-INF\classes目录下
[b]b)接下来就是编写发布文件deploy.wsdd[/b],在%TOMCAT_HOME%\webapps\axis\WEB-INF目录下建立这个文件并且在其中添加如下内容:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorldWsdd" provider="java:RPC">
<parameter name="className" value="com.wl.webservice.test.HelloWorldWsdd"/>
<parameter name="allowedMethods" value="hello"/>
</service>
</deployment>
这个wsdd文件是一个标准的XML文件,包含三个元素:
<deployment>元素制定了wsdd所用的XML命名空间,是这个文件的根。
<service>元素制定了一项SOAP服务。它有两个属性。name指定了这个服务的唯一标志符,provider指定了实现的语言及服务方式。一个wsdd文件可能有多个<service>元素。
<parameter>指定了服务详细信息,是一组name/value对应的值。其中,clcssName指定了实现这个服务的类的名字,allowedMethods指定了这个服务暴露的方法列表。
其中的com.wl.webservice.test是包的名称。
打开cmd命令窗口,进入%Tomcat_HOME%\webapps\axis\WEB-INF目录下面输入如下命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService deploy.wsdd
或者
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
执行结果如下:
[img]http://dl.iteye.com/upload/attachment/486380/e8cf570a-6d28-38f7-8d43-edf1a212c6ab.png[/img]
控制台返回Processing file deploy.wsdd 和Done processing 说明发布成功。
并且会在同一级别目录下生成一个service-config.wsdd文件。
发布成功之后,可以通过访问http://localhost:8080/axis/servlet/AxisServlet来查看所有的定制发布的服务。
但是我在通过http://localhost:8080/axis/servlet/AxisServlet查看的时候,页面报一些错误:
[img]http://dl.iteye.com/upload/attachment/486413/587271bb-2a1c-3768-b548-45f969ba5f0e.png[/img]
出错的原因是:我创建的这个HelloWorldWsdd服务是有包名称com.wl.webservice.test
解决方法:在%Tomcat_HOME%\webapps\axis\WEB-INF\classes下面创建目录com,在com下创建目录wl,在wl下创建目录webservice,在webervice下创建目录test,最后把HelloWorldWsdd.class文件再 拷贝到test目录下面。
重新http://localhost:8080/axis/servlet/AxisServlet查看结果:
[img]http://dl.iteye.com/upload/attachment/486415/bceb179c-ff6b-3703-bbf2-f54bb4c7ccba.png[/img]
[color=red]备注:发布deploy.wsdd可能会出现的问题:[/color]
I)axis所需要的Jar包如下:
[img]http://dl.iteye.com/upload/attachment/486396/309e91b1-370c-336a-9471-8252438685f8.png[/img]
在部署deploy.wsdd的时候会报一个Unable to find required classes的信息,具体:
[img]http://dl.iteye.com/upload/attachment/486398/ed48b578-47ea-35a4-829a-74cfd5fddea1.png[/img]
但是影响不大,要是去掉这个警告信息的话,还需要一个Jar包mail.jar,从相关网站下载后拷贝到%Tomcat_HOME%\webapps\axis\WEB-INF\lib下面,再次重新部署deploy.wsdd就不会再报上面的警告信息了。
参考:[url]http://blog.csdn.net/foamflower/archive/2008/09/08/2897501.aspx[/url]
II)在部署deploy.wsdd的时候Tomcat服务器需要开启,否则会报异常信息:
[img]http://dl.iteye.com/upload/attachment/486407/a25bef59-4b50-31e5-94b0-84ba849395f3.png[/img]
[b]c)客户端代码如下:[/b]
package com.wl.webservice.test;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloWorldWsddClient {
public static void main(String[]args){
try {
String uri="http://localhost:8080/axis/services/HelloWorldWsdd";
Service service=new Service();
Call call=(Call)service.createCall();
call.setTargetEndpointAddress(uri);
call.setOperationName(new QName(uri,"hello"));
String result=(String)call.invoke(new Object[]{"wanglei and zhangsan"});
System.out.println("result="+result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行客户端代码结果如下:
[img]http://dl.iteye.com/upload/attachment/486388/78b19676-8d73-3bee-9b3b-a2f05f4ceec4.png[/img]
[color=blue][b]3.取消发布一个WebService[/b][/color]
取消一个已经发布的WebService很简单,在发布的时候有个deploy.wsdd文件,那在取消发布的时候需要一个undeploy.wsdd文件即可。
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
<service name="HelloWorldWsdd" />
</undeployment>
将这个文件拷贝到%Tomcat_HOME%\webapps\axis\WEB-INF目录下,然后再控制台输入命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd 运行结果:
[img]http://dl.iteye.com/upload/attachment/486419/057db302-0c4e-30e0-81c9-48c186280a5b.png[/img]