Axis2与Web项目整合
一、说明:
上一篇介绍了通过使用Axis2来发布和调用WebService,但是是把WebService发布在Axis2提供的项目中,如果我们需要在自己的Web项目中来使用Axis2发布WebService该怎么做呢?
本篇即介绍在Web项目中使用Axis2来发布WebService.
二、具体操作:
① 新建一个动态的web工程 (Dynamic Web project)
本例中新建的工程名为:AxisWebDemo
② 将上次下载的 axis2-1.6.4-war.zip 文件解压到相应的目录,将目录中的axis2.war文件放到Tomcat服务器的webapps目录中(本文使用的Tomcat的版本是7.x),并启动Tomcat。 这时在Tomcat的webapps文件夹中会出现一个 名为 axis2 的文件夹(其实这就是部署好的 axis2工程),如下图
③ 将 axis2 下的 axis2-web 文件夹移动到我们 AxisWebDemo 工程的 WebContent目录下
将WEB-INF 下的 lib 、conf 、modules文件夹移动到 AxisWebDemo工程的 WEB-INF目录下 ,结构如下图:
④ 在src右键,新建package : com.elgin.webservice
在这个包中新建一个我们需要发布的 WebService 服务的类: WebServiceDemo
代码如下:
package com.elgin.webservice; public class WebServiceDemo { public String sayHello(String name){
return "hello " + name;
} public int getAge(){
return 26;
}
}
⑤ 在 AxisWebDemo 工程的 WEB-INF 下新建如下层次结构目录 : services/webservices/META-INF/services.xml ,如下图所示:
经过我的验证,发现 :目录层次必须是 services / 任意名称文件夹 / META-INF / services.xml ,否则 WebService发布会失败 ,也就是说上图的层次中 ,只有webservice这个文件夹的名字是可以自由指定,其它的文件、文件夹名字都是固定的!
services.xml 配置文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
<!- name属性配置WebService的名称 ->
<service name="myService">
<description>Web Service</description>
<!-- ServiceClass属性配置提供WebService服务类的全类名 -->
<parameter name="ServiceClass">com.elgin.webservice.WebServiceDemo</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>
⑥ 在 AxisWebDemo 工程的 web.xml 文件中加入axis2的配置支持:
<!-- 加入axis2支持 -->
<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>
经过以上6个步骤 , axis2 已经整合到工程中了 ,把项目加入的Tomcat中,启动Tomcat服务器 ,在浏览器中输入以下URL:
http://localhost:8080/AxisWebDemo/services/listServices
如果出现下图所示的信息,说明你的 WebService服务发布成功了:
上图中的 myService 即是你在 services.xml 中配置的 WebService的名称
输入下面URL:
http://localhost:8080/AxisWebDemo/services/myService?wsdl
出现下图所显示的关于服务的xml信息:
注意上图中 <wsdl:definitions> 元素中的 targetNamespace的值 ,上一篇介绍中也提到过 ,是提供WebService服务的类所在的包名倒过来。
三、调用上面工程中发布的WebService服务:
Java调用代码:
package com.elgin.webservice.axis2; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.xml.namespace.QName; import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient; public class RPCClient { public static String address2="http://localhost:8080/AxisWebDemo/services/myService?wsdl"; public static void main(String[] args) throws IOException{ testWebDemo(); } @SuppressWarnings("rawtypes")
public static Object[] invoke(String method,Object[] params,Class[] classes) throws AxisFault{
//使用RPC方式调用WebService
RPCServiceClient client=new RPCServiceClient();
Options option=client.getOptions(); //指定调用的URL
EndpointReference reference=new EndpointReference(address2);
option.setTo(reference); /*
* 设置要调用的方法
* http://ws.apache.org/axis2 为默认的(无package的情况)命名空间,
* 如果有包名,则为 http://axis2.webservice.elgin.com ,包名倒过来即可
* method为方法名称
*
*/
QName qname=new QName("http://webservice.elgin.com", method); //调用远程方法,并指定方法参数以及返回值类型
Object[] result=client.invokeBlocking(qname,params,classes); return result; } public static void testWebDemo() throws AxisFault{
Object[] result=invoke("sayHello", new Object[]{"elgin"}, new Class[]{String.class});
System.out.println(result[0]);
result=invoke("getAge", new Object[]{}, new Class[]{int.class});
System.out.println(result[0]);
} }
运行结果:
最新文章
- (四)SQL Server分区管理
- Windows系统Stunnel客户端的配置
- 查询SQLServer 服务器,执行过的SQL语句耗时!
- mysql 如何用root 登录
- vim开发环境配置
- jquery 提示插件 cluetip
- 在线LCA模板
- 概念学习 - JNDI, JDBC, ODBC, DataSource
- 原生javascript制作时钟
- 补充:CSS选择器样式的规范!
- The android command is deprecated
- 微信小程序显示html格式内容(wxParse使用及循环解析数据渲染)
- Windows Phone 8.1 Update Preview backup失败的解决方法
- ubuntu 14.04 server(amd64) 安装ros indigo
- php安装时开启很多扩展,如果忘了开启某些扩展,以后还能加上吗?答案是可以的
- 什么是Github?
- List自定义排序
- 020.1.1 collections集合工具类
- 深入理解javascript作用域系列第一篇
- 《Inetnet History,Technology and Security》学习笔记