5分钟学习Axis2的WebService编写和发布
作者:yiyang Liu
摘要:
经作者多次研究Axis后找到一种快速编写和发布Webservice的一条龙方法,本文旨在于采用帮助初学者快速编写和部署Webservice。
目录
1. 下载和安装axis2
2. java工程的服务编写
3. Java工程服务发布
4. 编写测试客户端.
5. Axis2与Spring的整合
1.下载和安装axis2
1 下载axis2的两个包,一个axis2-*-bin.zip包(axis2的常用工具),一个axis2-*-war.zip包(用来发布axis2)。
2 把war包放到tomcat目录的webapp下,然后启动tomcat,会自动生成一个axis2的目录,这就是axis2的web主容器,我们自己的java服务最终都要放到这个容器里才能发布。
2.java工程的服务编写
该方法适用于简单java工程编写的服务,如果使用其他框架如spring,请见Axis2与Spring的整合节
。
1 创建java工程,例如为JeremyService 。
2 在JeremyService工程的根目录下新建目录META-INF,并新建文件services.xml
3 编写一个java类,这个类用来发布我们的service。例如编写一个Person类,该类在net.ssc目录下。
package net.ssc;
publicclass Person {
public String getPerson(String name) {
return name;
}
}
4 编辑META-INF目录下的services.xml内容,注册Person服务。注:一个<service></service>一个服务,如果有多个服务,只需要配置多个<service></service>。
<serviceGroup>
<service name="JeremyService">
<description>Jeremy Service</description>
<parameter name="ServiceClass">net.ssc.Person</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
到这里java工程的服务就算搞定了,下一步就是发布服务了。
3.Java工程服务发布
1 把JeremyService工程打成jeremy.jar包,jar包内容选择src和META-INF,把生成好的jeremy.jar放到tomcat目录下的webapps\axis2\WEB-INF\services下。如果有工程依赖的其他jar包,需要把这些jar包放到tomcat目录下的webapps\axis2\WEB-INF\lib下。重启tomcat,注意观察启动的打印信息,如果重启tomcat后有冲突请检查jeremy.jar包中是否有和webapps\axis2\WEB-INF\lib重复的jar包,如果有请重新打包,只选择src和META-INF,不要包括jar包内容。
2 检查发布是否成功,在浏览器中输入http://localhost:8080/axi2进入axi2的管理界面,然后点击Services链接查看是否有JeremyService服务,如果有证明成功,如果页面上无该服务或者该服务失败,请重新检查并发布。注意Tomcat端口是否为默认8080。
4. 编写测试客户端
利用axis2的工具,采用最简单的在线发布客户端代码。(也可以指定wsdl文档和发布数据类型,具体请参考http://axis.apache.org/axis2/java/core/docs/quickstartguide.html)。
1 首先需要启动服务端tomcat,打开浏览器在本机上测试http://localhost:8080/axis2/services/JeremyService?wsdl可以打开。
2 解压官网下载的axis2-*-bin.zip包,进入解压后的目录axis2-1.6.2-bin\axis2-1.6.2\bin中,可以看到很多bat文件。我们在里面新建一个bat文件:JeremyServiceCreate.bat。内容为:
wsdl2java.bat -uri http://localhost:8080/axis2/services/JeremyService?wsdl -p jeremyserviceclient -s -o d:\webservice\client
注:-p为客户端代码的包名,-d为生成的目的位置。保存后,双击JeremyServiceCreate.bat,此时会在D:\webservice\client\src\jeremyserviceclient生成一个文件JeremyServiceStub.java,这个类中已经集成好服务器的具体ip地址和端口。
3 新建一个客户端工程ClientPerson,新建lib目录,把\axis2-1.6.2-bin\axis2-1.6.2\lib的jar包拷贝到该目录下。给ClientPerson添加这些Jar包。
拷贝JeremyServiceStub.java到ClientPerson工程src\jeremyserviceclient\目录下。
在src下新建一个MainGate.java。
内容为:
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import jeremyserviceclient.JeremyServiceStub;
publicclass MainGate {
publicstaticvoid main(String[] args) {
JeremyServiceStub.GetPerson person = new JeremyServiceStub.GetPerson();
person.setName("Jeremy");
try {
JeremyServiceStub stub = new JeremyServiceStub();
try {
JeremyServiceStub.GetPersonResponse response = stub
.getPerson(person);
String personReturn = response.get_return();
System.out.println(personReturn);
} catch (RemoteException e) {
e.printStackTrace();
}
} catch (AxisFault e) {
e.printStackTrace();
}
}
}
运行这个java类,就会输出Jeremy
5. Axis2与Spring的整合
1 拷贝spring的jar包到webapps\axis2\WEB-INF\lib
2 编辑webapps\axis2\WEB-INF\web.xml内容,在</web-app>之前添加下面内容:
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<context-param>
<param-name> contextConfigLocation </param-name>
<param-value> /WEB-INF/applicationContext.xml</param-value>
</context-param>
在web.xml中添加spring上下文的Listener,并填入spring的配置文件applictionContext.xml的路径,如/WEB-INF/applicationContext.xml。
3 在/WEB-INF/applicationContext.xml增加spring对axis2的支持和要发布的服务。
<bean id="applicationContext"
class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />
<bean id= "springAwareService" class = "net.ssc.Person" >
<property name= "manger" ref = "manager" />
</bean>
注:id=springAwareService对应META-INF\services.xml中的<parameter name= "SpringBeanName" >springAwareService</parameter>。
<property name= "manger" ref = "manager" />假设为需要注入的manger的bean。
4 修改spring框架的Service服务工程配置,编辑META-INF\services.xml内容为:
<service name= "JeremySpringService" >
<description>simple spring example</description>
<parameter name= "ServiceObjectSupplier" >
org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parameter name= "SpringBeanName" >springAwareService</parameter>
<messageReceivers>
<messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-only"
class = "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out"
class = "org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
5 发布service工程
生成Jar包JeremySpringService.jar时,此时只需要打META-INF目录和其中的services.xml。将JeremySpringService工程编译好的class的包拷贝到tomcat下的webapps\axis2\WEB-INF\classes