应用Apache Axis2 实现Webservice发布
2012-06-08 10:27
323 查看
由于最近需要做webservice接口,所以google了一下,发现Apacle有个Axis2插件,一直觉得Apache的插件还是蛮好用的,于是决定应用Axis2来实现Webservice,第一次做webservice,呵呵有很多不懂的地方,所以记录下来留着以后备用。
首先访问Apache官网http://axis.apache.org/axis2/java/core/download.cgi下载Axis2最新的1.6.2的两个文件,axis2-1.6.2-bin和axis2-1.6.2-war,我这里用到了axis2的eclipse插件,所以同时下载了 axis2-eclipse-codegen-plugin-1.6.2.zip和axis2-eclipse-service-plugin-1.6.2.zip两个eclipse插件。
下载完这几个文件之后,需要将axis2的war文件复制到tomcat的wabapps目录下,重启Tomcat服务,浏览器输入axis2服务地址http://localhost:8082/axis2/,如果axis2服务没有问题,页面会显示如下效果,说明服务启动成功。
接下来在Eclipse中安装axis2插件,将下载的axis2-eclipse-codegen-plugin-1.6.2.zip和axis2-eclipse-service-plugin-1.6.2.zip文件解压,解压出来就是2个jar包,
将这两文件复制到Ecilpse的 plugins文件夹下,重启Eclipse,配置axis2的运行环境,如图,图中的路径F:\axis2-1.6.2就是下载的axis2-1.6.2-bin的解压目录。
点击file->new others->,如果插件安装成功,在窗口的列表中会显示如下的axis2的两个选项,
做好以上准备工作之后,接下来就要开始创建Webservice了。首先创建一个java工程,并创建一个Java类,很简单的一个类,只包含一个公共方法,如下
在服务类TestService中,有一个getData方法,最后发布服务之后,该方法就是暴露给外界访问webservice接口的方法。包含2个String参数和一个返回值,在方法中,
通过DataBase类的getData方法访问了Oracle数据库并返回数据。
编写完服务类之后,通过axis2的插件将服务打包成aar文件,复制到tomcat的webapps的axis2目录下的WEB-INF下的services文件夹下,打包过程如下
点击file->new others-> 在窗口中选择Axis2 Service Archiver选项,然后下一步如图,该步骤是选择class类的根目录,在bin目录下,包含了2个Class类文件,
com.jax.test.TestService和com.jax.db.DataBase,因为在TestService服务类中,关联了DataBase类,所以要选择根目录。
点击next ->如图所示 勾选Skip WSDL
点击next->选择服务所需的jar包,在这里因为连接了oracle数据库,所以选择了orache的驱动包
点击next-> 如图,勾选 图中的选项。
点击next-> 如图,输入服务名和服务类的全路径名,选择Search declare methods only,会显示要发布的服务方法。
输入打包aar文件的名称和输出路径,最后打包完成。
最后将打包好的aar文件复制到tomcat 的axis2的WEB-INF的services目录下,重启Tomcat服务,如图,发布的MyService服务
这样一个简单的webservice服务就发布完成了,有一点需要注意的是,和这个服务类相关的类需要打成jar包拷贝到axis服务的WEB-INF的lib目录下。
用Axis2创建调用webservice的客户端,创建java工程,引入以下axis2相关的jar包
axiom-api-1.2.11.jar
axiom-impl-1.2.11.jar
axis2-adb-1.5.5.jar
axis2-kernel-1.5.5.jar
axis2-transport-http-1.5.5.jar
axis2-transport-local-1.5.5.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-io.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
mail-1.4.jar
neethi-2.0.5.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.3.jar
创建调用服务类,应用axis2提供的类实现调用服务,代码如下:
代码说明请看注释。
还有一种调用方式是通过axis2工具生成stub类,然后调用webservice,
打开cmd命令窗口,进入axis2的bin目录,输入命令:wsdl2java -urihttp://localhost:8082/axis2/services/MyService?wsdl -p client -s
-o stub
如图
其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个MyServiceStub.java文件,该文件复杂调用WebService,然后可以在程序中直接使用这个类,通过stub调用webservice
代码如下:
首先访问Apache官网http://axis.apache.org/axis2/java/core/download.cgi下载Axis2最新的1.6.2的两个文件,axis2-1.6.2-bin和axis2-1.6.2-war,我这里用到了axis2的eclipse插件,所以同时下载了 axis2-eclipse-codegen-plugin-1.6.2.zip和axis2-eclipse-service-plugin-1.6.2.zip两个eclipse插件。
下载完这几个文件之后,需要将axis2的war文件复制到tomcat的wabapps目录下,重启Tomcat服务,浏览器输入axis2服务地址http://localhost:8082/axis2/,如果axis2服务没有问题,页面会显示如下效果,说明服务启动成功。
接下来在Eclipse中安装axis2插件,将下载的axis2-eclipse-codegen-plugin-1.6.2.zip和axis2-eclipse-service-plugin-1.6.2.zip文件解压,解压出来就是2个jar包,
将这两文件复制到Ecilpse的 plugins文件夹下,重启Eclipse,配置axis2的运行环境,如图,图中的路径F:\axis2-1.6.2就是下载的axis2-1.6.2-bin的解压目录。
点击file->new others->,如果插件安装成功,在窗口的列表中会显示如下的axis2的两个选项,
做好以上准备工作之后,接下来就要开始创建Webservice了。首先创建一个java工程,并创建一个Java类,很简单的一个类,只包含一个公共方法,如下
package com.jax.test; import com.jax.db.DataBase; public class TestService { public String getData(String id,String name){ return DataBase.getData(id,name); } }
在服务类TestService中,有一个getData方法,最后发布服务之后,该方法就是暴露给外界访问webservice接口的方法。包含2个String参数和一个返回值,在方法中,
通过DataBase类的getData方法访问了Oracle数据库并返回数据。
编写完服务类之后,通过axis2的插件将服务打包成aar文件,复制到tomcat的webapps的axis2目录下的WEB-INF下的services文件夹下,打包过程如下
点击file->new others-> 在窗口中选择Axis2 Service Archiver选项,然后下一步如图,该步骤是选择class类的根目录,在bin目录下,包含了2个Class类文件,
com.jax.test.TestService和com.jax.db.DataBase,因为在TestService服务类中,关联了DataBase类,所以要选择根目录。
点击next ->如图所示 勾选Skip WSDL
点击next->选择服务所需的jar包,在这里因为连接了oracle数据库,所以选择了orache的驱动包
点击next-> 如图,勾选 图中的选项。
点击next-> 如图,输入服务名和服务类的全路径名,选择Search declare methods only,会显示要发布的服务方法。
输入打包aar文件的名称和输出路径,最后打包完成。
最后将打包好的aar文件复制到tomcat 的axis2的WEB-INF的services目录下,重启Tomcat服务,如图,发布的MyService服务
这样一个简单的webservice服务就发布完成了,有一点需要注意的是,和这个服务类相关的类需要打成jar包拷贝到axis服务的WEB-INF的lib目录下。
用Axis2创建调用webservice的客户端,创建java工程,引入以下axis2相关的jar包
axiom-api-1.2.11.jar
axiom-impl-1.2.11.jar
axis2-adb-1.5.5.jar
axis2-kernel-1.5.5.jar
axis2-transport-http-1.5.5.jar
axis2-transport-local-1.5.5.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-io.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
mail-1.4.jar
neethi-2.0.5.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.3.jar
创建调用服务类,应用axis2提供的类实现调用服务,代码如下:
package com.test; import java.util.Iterator; import javax.xml.namespace.QName; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; 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 CallWebservice { public String getData(String id,String name) { String result=null; //webService的调用地址 String srvcUrl = "http://localhost:8082/axis2/services/MyService"; //操作的命名空间+“:”+操作名 QName qname = new QName("http://test.jax.com", "getData"); //传递的参数对象集 Object param[] = new Object[] { id,name }; try { //实例化远程服务调用客户端对象 RPCServiceClient client = new RPCServiceClient(); //实例化Options对象 Options options = new Options(); //设置Options对象的连接终端地址 options.setTo(new EndpointReference(srvcUrl)); //设置Options对象的操作事件对象 options.setAction("urn:getData"); //为远程服务调用客户端对象设置Options子对象 client.setOptions(options); //传递参数,调用服务 OMElement element = client.invokeBlocking(qname, param); result=element.getFirstElement() .getText(); } catch (AxisFault e) { e.printStackTrace(); } return result; } //测试 public static void main(String[] args) { CallWebservice client=new CallWebservice(); String rs = client.getData("1","张三"); System.out.println(rs); } }
代码说明请看注释。
还有一种调用方式是通过axis2工具生成stub类,然后调用webservice,
打开cmd命令窗口,进入axis2的bin目录,输入命令:wsdl2java -urihttp://localhost:8082/axis2/services/MyService?wsdl -p client -s
-o stub
如图
其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个MyServiceStub.java文件,该文件复杂调用WebService,然后可以在程序中直接使用这个类,通过stub调用webservice
代码如下:
package client; import java.rmi.RemoteException; import org.apache.axis2.AxisFault; import client.MyServiceStub.GetDataResponse; public class CallService { public static void main(String[] args){ //MyServiceStub中生成了一个getData(GetData getData)的方法 //该方法的内部实现了调用发布的webservice服务中的getData()方法 //首先创建参数对象 MyServiceStub.GetData getData = new MyServiceStub.GetData(); //给参数赋值 getData.setId("1"); getData.setName("张三"); try { //实例化stub类 MyServiceStub stub = new MyServiceStub(); try { //调用服务方法 GetDataResponse rs = stub.getData(getData); //返回值为String String str = rs.get_return(); System.out.println(str); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 应用Apache Axis2 实现Webservice发布
- 应用Apache Axis2 实现Webservice发布
- 基于Apache Axis2 实现Webservice发布的应用
- CXF实现简单webservice应用、集成spring发布到tomcat
- WebService -- Java 实现之 CXF ( 使用:Spring+CXF+Tomcat发布webService)
- Apache CXF实现WebService发布和调用
- Java发布一个简单 webservice应用 并发送SOAP请求
- Win7环境下IIS7中实现发布WebService程序
- WebService学习之旅(五)基于Apache Axis2发布第一个WebService
- axis2实现webservice之使用services.xml文件发布WebService
- Maven+SpringMVC+CXF整合实现webservice服务的发布与调用
- C++语言实现的WebService开发库—gsoap应用实例
- win7电脑做服务器,搭建网站应用后发布到互联网的实现过程
- Jenkins+docker实现应用发布
- WEB应用发布管理平台的设计与实现
- ASP.NET实现基于Forms认证的WebService应用实例
- strtus2 + spring + CXF 实现能访问action的同时还能调用spring发布的Webservice
- Win7下面实现发布WebService程序和开发
- CXF实现WebService对对象和XML文件的发布
- Delphi开发的WebService应用发布-- 谈WAD/CGI/ISAPI 的区别