1、简单的pojo方式:

不需要写配置文件,直接把class文件拷贝到axis2的WEB-INF目录下的poji文件夹下即可。但其局限性表现在,实现类不能有包声明,这在实际开发过程中使用较少,这里不做说明。

2、打jar包的方式:

将接口实现放到axis2中。首先下载所需要的jar包,解压axis2-1.5.4-war.zip,将里面的axis2.war直接拷贝到tomcat里webapps中,启动tomcat后,会自动生成axis2文件夹。在浏览器中访问http://127.0.0.1:8080/axis2/,能看到以下界面说明axis2启动成功。

点击Services链接,可以看到available services只有Version,这个是Axis2自带的接口。

然后开始新建一个我们自己的webService。在myEclipse中新建项目:webServiceTest。

新建类com.sdjxd.SayHelloImpl.java

Java代码  
  1. package com.sdjxd;
  2. /**
  3. * @description 简单接口方法实现
  4. * @author lizhen
  5. */
  6. public class SayHelloImpl {
  7. public void sayHello() {
  8. System.out.println("Hello WebService");
  9. }
  10. public void sayHelloToSomeOne(String name) {
  11. System.out.println("Hello " + name);
  12. }
  13. }
package com.sdjxd;
/*** @description 简单接口方法实现* @author lizhen*/
public class SayHelloImpl {public void sayHello() {System.out.println("Hello WebService");}public void sayHelloToSomeOne(String name) {System.out.println("Hello " + name);}
}

在项目的src目录下建立文件夹META-INF,在META-INF中创建services.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- webService发布名称,命名空间 -->
  3. <service name="myService" targetNamespace="http://ws.apache.org/ax2">
  4. <!-- 更改schemaNamespace,也可使用默认值,客户端调用时会使用 -->
  5. <schema schemaNamespace="http://sdjxd.com.cn"/>
  6. <!-- webService描述 -->
  7. <description>Web Service实例一</description>
  8. <!-- webService的实现类 -->
  9. <parameter name="ServiceClass">com.sdjxd.SayHelloImpl</parameter>
  10. <messageReceivers>
  11. <!-- 配置消息接收器,Axis2会自动选择 -->
  12. <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
  13. class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  14. <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
  15. class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
  16. </messageReceivers>
  17. </service>
<?xml version="1.0" encoding="UTF-8"?>
<!-- webService发布名称,命名空间 -->
<service name="myService" targetNamespace="http://ws.apache.org/ax2">
<!-- 更改schemaNamespace,也可使用默认值,客户端调用时会使用 -->
<schema schemaNamespace="http://sdjxd.com.cn"/>
<!-- webService描述 -->
<description>Web Service实例一</description>
<!-- webService的实现类 -->
<parameter name="ServiceClass">com.sdjxd.SayHelloImpl</parameter>
<messageReceivers>
<!-- 配置消息接收器,Axis2会自动选择 -->
<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>

在控制台上找到当前项目的src目录。
  输入打jar包的命令:jar cvf webServiceTest.aar . 最后面是空格+小数点。

执行完成后,目录下会出现webServiceTest.aar文件。

然后将webServiceTest.aar文件拷贝到D:\tomcat-6.0\webapps\axis2\WEB-INF\services中

重新启动tomcat,访问http://127.0.0.1:8080/axis2/,然后再点击Services,可以看到此时有两个Available Services,其中myService就是我们刚才定义的。

点击myService,可以看到生成的wsdl配置文件:其中命名空间是我们自定义的那个。

至此,webService的服务器端开发就完成了,由于客户端的访问方式都是相同的,这个放到最后。

3、不打jar包的方式:(重点)

将axis2整合到接口所在系统中。同样如第二种方法,编写一个名为webServiceAxis2的项目。实现com.sdjxd.SayHelloImpl。

由于要将Axis2添加到项目中,所以需要在web.xml中添加如下配置:

Xml代码  
  1. <!--Axis2 config start-->
  2. <servlet>
  3. <servlet-name>AxisServlet</servlet-name>
  4. <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
  5. <load-on-startup>1</load-on-startup>
  6. </servlet>
  7. <servlet-mapping>
  8. <servlet-name>AxisServlet</servlet-name>
  9. <url-pattern>/services/*</url-pattern>
  10. </servlet-mapping>
  11. <!--Axis2  end-->
<!--Axis2 config start-->
<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>
<!--Axis2  end-->

然后找到部署在tomcat中的axis2目录下的WEB-INF里的一下三个文件夹conf、modules、services。将他们拷贝到项目webServiceAxis2中的WEB-INF目录下。
  将axis2中lib下的jar包全部拷贝到webServiceAxis2里的lib中。然后再services目录下建立目录:webService/META-INF,在这个目录下建立services.xml配置文件。配置方法同上。目录webService/META-INF中webService名字是任意的,这里取webService。

最后,将下载的项目中的axis2-web文件夹拷贝到webroot下,这个文件夹控制显示axis2的服务器列表等信息。
  完成后,重启tomcat,访问http://127.0.0.1:8080/ webServiceAxis2/services/listServices可以看到接口列表。访问地址http://127.0.0.1:8080/ webServiceAxis2/services/myService?wsdl可以看到wsdl配置。

4、客户端访问webService的方法

两个方法分别调用webService中的两个接口方法。

Java代码  
  1. package com.sdjxd;
  2. import javax.xml.namespace.QName;
  3. import org.apache.axis2.AxisFault;
  4. import org.apache.axis2.addressing.EndpointReference;
  5. import org.apache.axis2.client.Options;
  6. import org.apache.axis2.rpc.client.RPCServiceClient;
  7. public class ComeToSayHi {
  8. /**
  9. * @method comeToSay
  10. * @description 调用接口方法sayHello(),接口方法无参,无返回值
  11. * @author lizhen
  12. */
  13. public static String comeToSay() {
  14. //接口访问地址,最后要有“?wsdl”
  15. String url = "http://127.0.0.1:8080/webServiceAxis2/services/myService?wsdl";
  16. //访问接口方法
  17. String method = "sayHello";
  18. RPCServiceClient serviceClient = null;
  19. try {
  20. serviceClient = new RPCServiceClient();
  21. Options options = serviceClient.getOptions();
  22. EndpointReference targetEPR = new EndpointReference(url);
  23. options.setTo(targetEPR);
  24. //连接服务器段的超时时间
  25. options.setTimeOutInMilliSeconds(100000L);
  26. //不加的话容易出现异常。
  27. options.setAction(method);
  28. //初始化参数,无参时,不能使用null,必须使用new Object[] {}。
  29. //有参数,使用new Object[] {param}
  30. //有多个参数,不用指定参数的名称new Object[] {param1,param2,...}
  31. Object[] opAddEntryArgs = (Object[]) null;
  32. opAddEntryArgs = new Object[] {};
  33. //在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值
  34. QName opAddEntry = new QName("http://sdjxd.com.cn", method);
  35. //要调用的方法没有返回值,使用方法invokeRobust(QName, new Object[]{..});
  36. //第一个参数的类型是QName对象,表示要调用的方法名;
  37. //第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
  38. //如果有返回值则要使用invokeBlocking(QName, new Object[]{..},new Class[]{..})
  39. //第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
  40. serviceClient.invokeRobust(opAddEntry,opAddEntryArgs);
  41. //清空缓存,否则容易出错。
  42. serviceClient.cleanupTransport();
  43. return "Hi";
  44. } catch (AxisFault e) {
  45. e.printStackTrace();
  46. }
  47. return "Hi";
  48. }
  49. /**
  50. * @method comeToSayHelloToSomeone
  51. * @description 调用接口方法sayHelloToSomeone(),接口方法有参,有返回值
  52. * @author lizhen
  53. */
  54. public static String comeToSayHelloToSomeone() {
  55. String url = "http://127.0.0.1:8080/webServiceAxis2/services/myService?wsdl";
  56. String method = "sayHelloToSomeone";
  57. String str = "li";
  58. String result = "";
  59. RPCServiceClient serviceClient;
  60. try {
  61. serviceClient = new RPCServiceClient();
  62. Options options = serviceClient.getOptions();
  63. EndpointReference targetEPR = new EndpointReference(url);
  64. options.setTimeOutInMilliSeconds(100000L);
  65. options.setAction(method);
  66. options.setTo(targetEPR);
  67. QName opAddEntry = new QName("http://sdjxd.com.cn", method);
  68. Object[] opAddEntryArgs = new Object[] {str};
  69. Class[] classes = new Class[] { String.class };
  70. //webService方法有参数,使用invokeBlocking方法调用
  71. result = (String) serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0];
  72. } catch (AxisFault e) {
  73. e.printStackTrace();
  74. }
  75. return result;
  76. }
  77. public static void main(String[] args) {
  78. String a = comeToSay();
  79. String b = comeToSayHelloToSomeone();
  80. System.out.print(a + "-----" + b);
  81. }
  82. }

使用Axis2方式发布webService实例说明相关推荐

  1. 二、用wsdd(Web Services Deployment Descriptor)方式发布WebService

    wsdd方法比jws方法要稍微复杂些,但一定程度上比jws发布的方法要灵活. 1.首先在AxisWebService工程创建一个java类,里面写简单的2个方法getName.getAge,代码如下: ...

  2. idea使用xfire方式发布webservice教程

    近日在熟悉webservice发布的过程,此处主要讲解xfire方式. 1.使用idea新建一个web项目 步骤1: 按照图中的指定序号建立对应的web项目即可. 步骤2: 填写组织ID和具体项目id ...

  3. WebService大讲堂之Axis2(3):使用services.xml文件发布WebService

    用Axis2 实现Web Service ,虽然可以将POJO 类放在axis2\WEB-INF\pojo 目录中直接发布成Web Service ,这样做不需要进行任何配置,但这些POJO 类不能在 ...

  4. WebService之Axis2 (3):使用services.xml文件发布WebService

    用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中.这 ...

  5. 使用CXF发布WebService服务简单实例

    一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...

  6. webservice实例java_Java WebService(实战) 简单实例

    一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...

  7. FineReport中以jws方式调用WebService数据源方案

    在使用WebService作为项目的数据源时,希望报表中也是直接调用这个WebService数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢? 在程序中访问WebService应用服务, ...

  8. Axis2创建WebService实例

    为什么80%的码农都做不了架构师?>>>      一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:       ...

  9. Axis2 POJO实现WebService(一)发布

    一.Axis2的下载和安装 读者可以从如下的网址下载Axis2的最新版本: http://ws.apache.org/axis2/ 下载: axis2-1.6.2-bin: 二.编写和发布WebSer ...

最新文章

  1. RhinoMock入门(3)——4种Mock类型
  2. wxWidgets:wxPGMultiButton类用法
  3. python控制摄像头拍照_python+opencv+pyqt5控制摄像头在Qlabel上显示
  4. python修改列表指定位置的_Python 基础教程—列表(1)
  5. 程序代码传输工具:飞秋官方下载
  6. ASCII编码,将英文存储到计算机
  7. python爬虫之图片下载APP1.0
  8. 彻底禁止Win10自动更新工具Windows Update Blocker v1.5 汉化版
  9. 【雕爷学编程】Arduino动手做(3)---微波雷达感应开关模块
  10. 计算机格式按键在哪儿,键盘开关按键在哪里
  11. Mybatis框架与mysql数据库简单应用
  12. 阅读心得:JDE:Towards Real-Time Multi-Object Tracking
  13. migration php,PHP日记——Lavarel常用语句之Migration篇
  14. 赵小楼《天道》《遥远的救世主》深度解析(35)你觉得叶晓明、冯世杰、刘冰是底层吗?
  15. oracle查看日期是第几周
  16. python实现随机密码生成
  17. quartus 13.0 网络盛传的破解方法勘误(网传大多数破解步骤有误)
  18. 第三方软件测试z5x电池,5000mAh的vivo Z5x能用多久?三大续航测试摧残,表现出乎意料...
  19. Cesium深入浅出之如何获取帧率
  20. 简单DIV CSS布局网站 (HTML学生个人网站作业设计) 体育运动主题网页设计与实现

热门文章

  1. 用反射方法使用户控件动态调用父页面的方法
  2. MySQL介绍及安装(一)
  3. Mob统计分析游戏类App详细埋点需求
  4. 一些服务器客户端的c例子
  5. Linux的网络管理命令使用总结
  6. 使用代码为TextView设置drawableLeft
  7. windows下Emacs的安装与配置
  8. 【CAM应用】谈CAM软件在实际生产中的应用举例
  9. 管理 windows server 2003 的远程连接
  10. poj 3461 Oulipo (KMP)