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

  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

  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中添加如下配置:

  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中的两个接口方法。

    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. 使用Axis2方式发布webService的三种方式

    1.Axis2的下载和安装 首先可以下载如下两个zip包:axis2-1.6.1-bin.zipaxis2-1.6.1-war.zip其中 axis2-1.6.1-bin.zip文件中包含了Axis2 ...

  2. FTP方式发布webservice

    以前我发布webservice的步骤是:在  C:\inetpub\wwwroot\路径下发布webservice,然后再在IIS中添加网站并制定路径,这样每次发布了webservice后,需要把发布 ...

  3. CXF整合Spring发布WebService实例

    一.说明: 上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用. 这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服 ...

  4. spring与axis2整合发布webservice

    最近在研究整合spring框架和axis2发布webservice服务,由于本人也才学java不久,为了便于以后的查看,在这里记录下发布过程. 所需的工具包,spring.jar和axis2链接地址为 ...

  5. WebService学习之旅(七)Axis2发布WebService的几种方式

    前面几篇文章中简单的介绍了如何使用Axis2发布WebService及如何使用Axis2实现Web服务的客户端调用,本节將详细介绍Axis2发布WebService的几种方式. 一.使用aar包方式发 ...

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

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

  7. 使用JDK和axis2发布webservice

    最近使用webservice进行远程调用一直很火,自从JDK1.6版本发布后,发布一个webservice项目变得更加简单了 笔者由于工作的需要针对JDK和axis2如何发布webservice做过相 ...

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

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

  9. Maven搭建webService (二) 创建服务端---使用web方式发布服务

    今天和大家分享 使用 web方式发布 webService 服务端.客户端 1.首先创建 一个web工程(增加Maven依赖) 2.增加Maven依赖包,如下: <!-- spring core ...

随机推荐

  1. SGU495Kids and Prizes 数学期望

    题意: 有n个奖品,m个人排队来选礼物,对于每个人,他打开的盒子,可能有礼物,也有可能已经被之前的人取走了,然后把盒子放回原处.为最后m个人取走礼物的期望. 题解: 本道题与之前的一些期望 DP 题目 ...

  2. 【转载】java 监听文件或者文件夹变化的几种方式

    1.log4j的实现的文件内容变化监听 package com.jp.filemonitor; import org.apache.log4j.helpers.FileWatchdog; public ...

  3. 一次由于 MTU 设置不当导致的网络访问超时

    转自:http://weibo.com/ttarticle/p/show?id=2309404140904511340923 API 服务正常,但是调用总是超时.api端日志显示,响应速度很快. ​​ ...

  4. Django admin(四)一些有用定制

    原文:https://www.cnblogs.com/linxiyue/p/4075048.html Model实例,myapp/models.py: 1 2 3 4 5 6 7 8 9 10 11 ...

  5. 洛谷 P3178 BZOJ 4034 [HAOI2015]树上操作

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...

  6. lca学习题

    http://www.cnblogs.com/scau20110726/archive/2013/06/14/3135095.html

  7. Tyvj - 1286 - 校门外的树2

    描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1 ...

  8. 0809MySQL-InnoDB Compact 行记录格式

    InnoDB存储引擎提供了compact(5.1后的默认格式)和redundant两个格式来存放行记录数据.redundant格式是为了兼容之前的版本而保留. mysql> show table ...

  9. JavaScript 事件代理绑定

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. cogs 983. [NOIP2003] 数字游戏

    983. [NOIP2003] 数字游戏 ★☆   输入文件:numgame.in   输出文件:numgame.out   简单对比时间限制:1 s   内存限制:128 MB 题目描述 丁丁最近沉 ...