axis2实现Web Service
项目中使用的是webservice,以前没有深入研究过,最近空余时间了解了一下使用axis2来实现Web Service。
先简单说一下Web Service
Web Service:
Web Service 主要是用来不同系统之间的交互,实际上是一种RPC技术,是一种跨编程语言和跨操作系统平台的远程调用技术。比如说微信支付宝等这种可以绑定银行卡的APP,他们本身并没有银行卡中的数据,它们都是通过调用银行系统提供的接口来获取银行卡中的余额。
三种方式利用axis2实现Web Service
这里说明一下,axis2有war包和jar包,因为axis2本身就是一个服务。
第一种方式:利用普通的java类和axis2服务来实现:
1.首先去官网下载axis2的相关jar包以及war包(地址:http://ws.apache.org/axis2/ )
2.将war包放到tomcat的webapps目录下,然后启动tomcat(启动时tomcat会自动解压war包),启动成功之后访问 http://localhost:8080/axis2/
如果出现下面的界面则axis2服务部署启动成功。
3.写一个测试类,代码如下:(注意这个类不能有package不然这种方式会出问题)
4.将编译之后的class文件,放在tomcat的 "webapps\axis2\WEB-INF" 目录下新建pojo文件夹(这个文件夹名称要固定的,我尝试改了名字但是改完就不行了),然后将TestService.class文件放到文件夹下,启动tomcat,访问 http://localhost:8080/axis2/services/listServices (这个是查询service列表的),访问之后能看到下面的界面就ok!
然后验证TestService接口是否可用,输入:http://localhost:8080/axis2/services/TestService/hello 和 http://localhost:8080/axis2/services/TestService/service?method=测试
出现下面的页面就说明没问题。
第二种方式:打包java类(补充方式1的不足)和axis2服务来实现
由于第一种方式的service类不能带有包名,但是在实际项目中大都是需要带有包名的,因此axis2也提供了带包名的实现方式。
1.先编写一个测试类,路径为: E:\demo\com\code\TestPackageService.class 代码如下:
2.要将带有package的java类变成一个Web Service服务还需要一个server.xml配置文件,路径为:E:\demo\META-INF\services.xml,内容如下图。(这个文件需要放在执行目录下: META-INF)
这个配置文件中主要需要注意的就是 messageReceivers 标签,该元素用于设置处理WebService方法的处理器。例如: TestPackageService类中的hello方法是没有返回值的所以需要上图的 RPCInOnlyMessageReceiver 类来处理,而TestPackageService类中的service方法是有返回值的因此就需要上图的RPCMessageReceiver来处理。
3.此种方式来实现WebService,需要打包为.aar文件.(aar文件实际上就是改变了扩展名的.jar文件)
在cmd中进入项目路径,我的是E:demo,然后输入: jar cvf demo.aar . 注意!最后一个点之前有个空格
然后将打包好的arr文件放到 tomcat的 "\webapps\axis2\WEB-INF\services"路径下。
4.启动tomcat验证即可。(验证方式和第一种相同,这里不做赘述)
第三种方式:在项目中内置axis2服务,并且不用打包
此种方式是在已有的web项目中嵌入axis2服务,这样就不用单独的启动axis2服务来实现Web Service了,直接启动web项目之后就会自带axis2服务。
实现方式:
1.先将axis2所需的东西复制到项目组(这里还有另一种方式: 解压axis2.war包,将解压出来的conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下)
1.1将下载好的axis2jar包加入到/WebRoot/WEB-INF/lib/目录下
1.2.将axis2.war/axis2-web拷贝至WebServiceDemo/ WebRoot/axis2-web/
2.修改web.xml文件
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3.写一个简单的demo
4.配置service.xml 内容和路径如下图
5.启动项目,到浏览器验证
访问: http://localhost:8080/项目名称或者自定义的path/services/listServices 查看服务列表
访问: http://localhost:8080/项目名称或者自定义的path/services/demoService?wsdl
补充说明
最后补充一下axis2的几个配置项:
路径是在tomcat下的 \webapps\axis2\WEB-INF\conf\axis2.xml
axis2的热部署: <parameter name="hotdeployment">true</parameter>
axis2的热更新: <parameter name="hotupdate">true</parameter>
如果是方式一来实现但是不想放在pojp目录下可以修改配置文件来自定义目录,在axisconfig节点下添加如下配置就可以放在test目录下了:
<deployer extension=".class" directory="test" class="org.apache.axis2.deployment.POJODeployer"/>