使用Axis2方式发布webService实例说明
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
- 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);
- }
- }
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 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>
<?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中添加如下配置:
- <!--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-->
<!--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中的两个接口方法。
- package com.sdjxd;
- 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 ComeToSayHi {
- /**
- * @method comeToSay
- * @description 调用接口方法sayHello(),接口方法无参,无返回值
- * @author lizhen
- */
- public static String comeToSay() {
- //接口访问地址,最后要有“?wsdl”
- String url = "http://127.0.0.1:8080/webServiceAxis2/services/myService?wsdl";
- //访问接口方法
- String method = "sayHello";
- RPCServiceClient serviceClient = null;
- try {
- serviceClient = new RPCServiceClient();
- Options options = serviceClient.getOptions();
- EndpointReference targetEPR = new EndpointReference(url);
- options.setTo(targetEPR);
- //连接服务器段的超时时间
- options.setTimeOutInMilliSeconds(100000L);
- //不加的话容易出现异常。
- options.setAction(method);
- //初始化参数,无参时,不能使用null,必须使用new Object[] {}。
- //有参数,使用new Object[] {param}
- //有多个参数,不用指定参数的名称new Object[] {param1,param2,...}
- Object[] opAddEntryArgs = (Object[]) null;
- opAddEntryArgs = new Object[] {};
- //在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值
- QName opAddEntry = new QName("http://sdjxd.com.cn", method);
- //要调用的方法没有返回值,使用方法invokeRobust(QName, new Object[]{..});
- //第一个参数的类型是QName对象,表示要调用的方法名;
- //第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
- //如果有返回值则要使用invokeBlocking(QName, new Object[]{..},new Class[]{..})
- //第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
- serviceClient.invokeRobust(opAddEntry,opAddEntryArgs);
- //清空缓存,否则容易出错。
- serviceClient.cleanupTransport();
- return "Hi";
- } catch (AxisFault e) {
- e.printStackTrace();
- }
- return "Hi";
- }
- /**
- * @method comeToSayHelloToSomeone
- * @description 调用接口方法sayHelloToSomeone(),接口方法有参,有返回值
- * @author lizhen
- */
- public static String comeToSayHelloToSomeone() {
- String url = "http://127.0.0.1:8080/webServiceAxis2/services/myService?wsdl";
- String method = "sayHelloToSomeone";
- String str = "li";
- String result = "";
- RPCServiceClient serviceClient;
- try {
- serviceClient = new RPCServiceClient();
- Options options = serviceClient.getOptions();
- EndpointReference targetEPR = new EndpointReference(url);
- options.setTimeOutInMilliSeconds(100000L);
- options.setAction(method);
- options.setTo(targetEPR);
- QName opAddEntry = new QName("http://sdjxd.com.cn", method);
- Object[] opAddEntryArgs = new Object[] {str};
- Class[] classes = new Class[] { String.class };
- //webService方法有参数,使用invokeBlocking方法调用
- result = (String) serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0];
- } catch (AxisFault e) {
- e.printStackTrace();
- }
- return result;
- }
- public static void main(String[] args) {
- String a = comeToSay();
- String b = comeToSayHelloToSomeone();
- System.out.print(a + "-----" + b);
- }
- }
使用Axis2方式发布webService实例说明相关推荐
- 二、用wsdd(Web Services Deployment Descriptor)方式发布WebService
wsdd方法比jws方法要稍微复杂些,但一定程度上比jws发布的方法要灵活. 1.首先在AxisWebService工程创建一个java类,里面写简单的2个方法getName.getAge,代码如下: ...
- idea使用xfire方式发布webservice教程
近日在熟悉webservice发布的过程,此处主要讲解xfire方式. 1.使用idea新建一个web项目 步骤1: 按照图中的指定序号建立对应的web项目即可. 步骤2: 填写组织ID和具体项目id ...
- WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
用Axis2 实现Web Service ,虽然可以将POJO 类放在axis2\WEB-INF\pojo 目录中直接发布成Web Service ,这样做不需要进行任何配置,但这些POJO 类不能在 ...
- WebService之Axis2 (3):使用services.xml文件发布WebService
用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中.这 ...
- 使用CXF发布WebService服务简单实例
一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...
- webservice实例java_Java WebService(实战) 简单实例
一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...
- FineReport中以jws方式调用WebService数据源方案
在使用WebService作为项目的数据源时,希望报表中也是直接调用这个WebService数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢? 在程序中访问WebService应用服务, ...
- Axis2创建WebService实例
为什么80%的码农都做不了架构师?>>> 一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: ...
- Axis2 POJO实现WebService(一)发布
一.Axis2的下载和安装 读者可以从如下的网址下载Axis2的最新版本: http://ws.apache.org/axis2/ 下载: axis2-1.6.2-bin: 二.编写和发布WebSer ...
最新文章
- RhinoMock入门(3)——4种Mock类型
- wxWidgets:wxPGMultiButton类用法
- python控制摄像头拍照_python+opencv+pyqt5控制摄像头在Qlabel上显示
- python修改列表指定位置的_Python 基础教程—列表(1)
- 程序代码传输工具:飞秋官方下载
- ASCII编码,将英文存储到计算机
- python爬虫之图片下载APP1.0
- 彻底禁止Win10自动更新工具Windows Update Blocker v1.5 汉化版
- 【雕爷学编程】Arduino动手做(3)---微波雷达感应开关模块
- 计算机格式按键在哪儿,键盘开关按键在哪里
- Mybatis框架与mysql数据库简单应用
- 阅读心得:JDE:Towards Real-Time Multi-Object Tracking
- migration php,PHP日记——Lavarel常用语句之Migration篇
- 赵小楼《天道》《遥远的救世主》深度解析(35)你觉得叶晓明、冯世杰、刘冰是底层吗?
- oracle查看日期是第几周
- python实现随机密码生成
- quartus 13.0 网络盛传的破解方法勘误(网传大多数破解步骤有误)
- 第三方软件测试z5x电池,5000mAh的vivo Z5x能用多久?三大续航测试摧残,表现出乎意料...
- Cesium深入浅出之如何获取帧率
- 简单DIV CSS布局网站 (HTML学生个人网站作业设计) 体育运动主题网页设计与实现