一、说明:

上一篇介绍了通过使用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]);
} }

运行结果:

最新文章

  1. (四)SQL Server分区管理
  2. Windows系统Stunnel客户端的配置
  3. 查询SQLServer 服务器,执行过的SQL语句耗时!
  4. mysql 如何用root 登录
  5. vim开发环境配置
  6. jquery 提示插件 cluetip
  7. 在线LCA模板
  8. 概念学习 - JNDI, JDBC, ODBC, DataSource
  9. 原生javascript制作时钟
  10. 补充:CSS选择器样式的规范!
  11. The android command is deprecated
  12. 微信小程序显示html格式内容(wxParse使用及循环解析数据渲染)
  13. Windows Phone 8.1 Update Preview backup失败的解决方法
  14. ubuntu 14.04 server(amd64) 安装ros indigo
  15. php安装时开启很多扩展,如果忘了开启某些扩展,以后还能加上吗?答案是可以的
  16. 什么是Github?
  17. List自定义排序
  18. 020.1.1 collections集合工具类
  19. 深入理解javascript作用域系列第一篇
  20. 《Inetnet History,Technology and Security》学习笔记

热门文章

  1. rsync常用命令及格式
  2. 适用于Firemonkey的Json解析对象XsuperObject使用方法介绍
  3. Qt之Tab键切换焦点顺序
  4. 解决Eclipse快捷键被其他软件占用
  5. BPMN2新规范与Activiti5
  6. 【转】 IOS 项目配置--构建输出DIR
  7. 不可或缺的 sendEmail
  8. Javascript高级程序设计
  9. java批量插入或更新的问题
  10. C#中 String 格式的日期时间 转为 DateTime