Axis2 创建webservice客户端和服务端
1、环境
Axis2:axis2-1.4.1(下载axis2-1.4.1-bin,并解压到指定路径)
Eclipse:Eclipse Java EE IDE for Web Developers. Version:Indigo Release
JAVA:jdk1.5.0_07
服务器:tomcat6.0(如果非安装版的不好使,可换成安装版)
2、安装eclipse并打开,进入:Window->Preferences->Web Services->Axis2 Preferences做如下设置(设置axis2的路径):
3、在eclipse中新建JAVA project(demo工程),并新建类HelloService.java,如下图所示。
4、编写HelloService.java类(即服务端的类),其中sayHello方法为服务端的方法。代码如下:
package com.sample.services;
public class HelloService {
public static void main(String[] args) {
} public String sayHello(String name){
return "Hello:"+name; } } |
5、新建webservice,点next
6、新建webservice对话框,需在两红色区域做些设置,第一个选择刚刚建立的HelloService的类,作为需要实现的服务。在第二个红色区域中,设置运行的服务器,webservice运行环境,及建立service工程的名称,这三个点击即都可以做修改。
完成以上配置后,选择next即可(后续都默认操作),并在最后一步启动tomcat服务,则tomcat自动完成部署。
7、Eclipse空间中自动生成了webService工程。同时发现对应的src无java类信息,则可以从第一次新建的demo项目中拷贝过来,并修改java类的编译路径,具体设置如下:
8、重新编译后,再次部署并重启tomcat服务。
查看服务端地址:http://localhost:8080/webService/,点击Services可查看具体的服务名信息。如正常显示如下图所示,则部署成功。
其中HelloService为刚刚部署的服务,对应的客户端请求地址为:
http://localhost:8080/webService/services/HelloService
9、编写客户端,代码如下:
package com.sample.services;
import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
public class Test { public static Log log = LogFactory.getLog(Test.class);
public static void main(String[] args)throws Exception { //使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); //查看服务端地址:http://localhost:8080/webService/ //指定调用WebService的URL EndpointReference targetEPR = new EndpointReference("http://localhost:8080/webService/services/HelloService"); options.setTo(targetEPR); //指定方法的参数值 Object[] opAddEntryArgs = new Object[] {"zengms"}; //指定方法返回值的数据类型的Class对象 Class[] classes = new Class[] {String.class}; //指定要调用的getGreeting方法及WSDL文件的命名空间 QName opAddEntry = new QName("http://services.sample.com","sayHello"); // 调用方法并输出该方法的返回值 String str=(String) serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]; System.out.println(str); } } |
执行客户端代码,传入参数:test,后台打印为:Hello:test
调试成功。
如果下发布多个WebService,可以使用<serviceGroup>元素,编写MyServices.java类(即服务端的类),其中sayHello方法为服务端的方法。代码如下:
package com.sample.services;
public class MyServices{
public static void main(String[] args) {
} public String sayHello(String name){
return "MyServices:"+name; } } |
在services.xml文件中做如下配置即可:
<serviceGroup> <service name="SttServices"> <Description> SttServices </Description> <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> <parameter name="ServiceClass" locked="false">com.stt.inter.services.SttServices </parameter> </service> <service name="MyServices"> <Description> MyServices </Description> <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> <parameter name="ServiceClass" locked="false">com.stt.inter.services.MyServices </parameter> </service> </serviceGroup>
附录:
经测试1.5.3及1.6.0版本中都会出现类AxisAdminServlet无法找到,主要的原因是这两个版本中的jar包中都不存在AxisAdminServlet类,这样导致service服务无法启动以及不能进入service的管理控制台。对这种情况可以通过以下方式解决:
找到当前版本对应的war包,如:axis2-1.6.0-war.zip并解压到指定目录,打开解压后的axis2.aar包,在WEB-INF/classes目录下有需要的类AxisAdminServlet,则可以将classes目录下所有的class文件打成jar包,重新放到工程目录中即可。
同时做如下更改(都是根据后台日志报错做的修改):
1、修改web.xml中AxisAdminServlet的<servlet-class>项为:org.apache.axis2.webapp.AxisAdminServlet
2、修改axis2.xml文件中transportReceiver节点的class熟悉配置修改为org.apache.axis2.transport.http.AxisServletListener,
另把环境换成WebLogic Server Version: 10.3.0.0 +axis2-1.6.0+jdk1.5+Eclipse Indigo Release,按照如上步骤再次操作,先在tomcat中部署测试后将生成的webservice服务端应用部署至weblogic域下可正常启动并调用正常。但是有weblogic9版本会有好多jar包有冲突问题。
打jar包命令:
进入dos操作符窗口
cd进入要打成jar包的class文件所有文件夹目录
jar cvf[生成jar的名称.jar] [列出class文件]
如:jar cvf 名称.jar ./文件夹 ——表示将当前文件夹下的class打jar
jar cvfibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class
二、把一个文件夹下面的所有class文件打成jar包
jar cvfibstool.jar * 回车
服务端打aar包命令:
用java cvf hello.aar和axis插件都可以。