博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Axis2实现WebService的发布和调用
阅读量:4956 次
发布时间:2019-06-12

本文共 4835 字,大约阅读时间需要 16 分钟。

一、Axis2的下载和安装

     1.可从 下载Axis2的最新版本:
      可以下载如下三个zip包:

  (用来将编写的服务代码打包成aar文件)

  (用于将WebService发布到Web容器中)

  (Eclipse插件)

  (Eclipse插件)

      前两个是eclipse的插件包,解压放到eclipse安装目录的dropins即可

    

   重启eclipse可以看到

        

 

       axis2-1.7.1-war.zip文件用于将WebService发布到Web容器中。解压下后将axis2.war放至tomcat安装目录下的webapps文件夹下,然后启动tomcat后,在webapps目录下会生成axis2文件夹。  访问http://localhost:8080/axis2/能看到以下页面表示axis2运行成功。

2  在Eclipse下新建Dtnamic Web Project,工程名:WebServiceServer(服务端)。新建包cn.test.webservice(包名小写,以免生成的java文件报错,后面的axis2自动生成的java文件包名都是小写,大写的包名生成java文件的包名都会变小写),在cn.test.webservice下新建IWebService

 

2:使用Axis2 代码生成器,完成WebService程序开发 (服务器端)根据接口生成 wsdl文件 (WebService 核心描述文件 )

  选择项目,new other,选择axis2 的代码生成器,如图:

 

先用service接口生成wsdl文件,所以选择“从java代码生成wsdl文件”,点击【下一步】

 

 

 填写类的名称,点击AddFolder  选择工作空间,项目下的bulid—>classes的目录,点击【测试类路径】显示成功!点击【下一步】

 

选择默认配置即可:

选择wsdl的输出路径,可以先放置到桌面

 

3:基于wsdl生成服务器代码。

选择项目,new other,选择axis2 的代码生成器,如图:

 

先用service接口生成wsdl文件,所以选择“从wsdl文件生成java代码”,点击【下一步】

 

 选择wsdl文件的位置:如图:

 

   选择代码选项为custom(自定义),并选择生成服务端代码和生成一个默认的services.xml文件,点击【下一步】。

 

    选择输出路径,为项目的根路径,点击【结束】,刷新项目,即生成服务端代码。

服务端代码如图:

 

导入响应的jar包

把tomcat安装目录下的webapps/axis2/WEB-INF下的modules、service和conf文件拷至WebService下的WEB-INF目录下。同时把lib下jar包也拷到项目的lib包下(测试方便全部拷贝,实际开发有jar包冲突)。

 

拷贝webapps/axis2/WEB-INF/web.xml的servlet内容,放置到项目WebService的web.xml下 web.xml去掉出错的部分

 

[html]   
 
  1. <servlet>  
  2.       <servlet-name>AxisServlet</servlet-name>  
  3.         
  4.       <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>  
  5.       <!--<init-param>-->  
  6.       <!--<param-name>axis2.xml.path</param-name>-->  
  7.       <!--<param-value>/WEB-INF/conf/axis2.xml</param-value>-->  
  8.       <!--<param-name>axis2.xml.url</param-name>-->  
  9.       <!--<param-value>http://localhost/myrepo/axis2.xml</param-value>-->  
  10.       <!--<param-name>axis2.repository.path</param-name>-->  
  11.       <!--<param-value>/WEB-INF</param-value>-->  
  12.       <!--<param-name>axis2.repository.url</param-name>-->  
  13.       <!--<param-value>http://localhost/myrepo</param-  
  14.       <!--</init-param>-->  
  15.       <load-on-startup>1</load-on-startup>  
  16.   </servlet>  
  17.   <servlet>  
  18.       <servlet-name>AxisAdminServlet</servlet-name>  
  19.         
  20.       <servlet-class>  
  21.           org.apache.axis2.webapp.AxisAdminServlet</servlet-class>  
  22.   </servlet>  
  23.     
  24.   <!-- servlet>  
  25.       <servlet-name>SOAPMonitorService</servlet-name>  
  26.       <display-name>SOAPMonitorService</display-name>  
  27.       <servlet-class>org.apache.axis2.soapmonitor.servlet.SOAPMonitorService</servlet-class>  
  28.       <init-param>  
  29.           <param-name>SOAPMonitorPort</param-name>  
  30.           <param-value>5001</param-value>  
  31.       </init-param>  
  32.       <init-param>  
  33.           <param-name>SOAPMonitorHostName</param-name>  
  34.           <param-value>localhost</param-value>  
  35.       </init-param>  
  36.       <load-on-startup>1</load-on-startup>  
  37.   </servlet -->  
  38.     
  39.   <servlet-mapping>  
  40.       <servlet-name>AxisServlet</servlet-name>  
  41.       <url-pattern>/servlet/AxisServlet</url-pattern>  
  42.   </servlet-mapping>  
  43.   
  44.   <servlet-mapping>  
  45.       <servlet-name>AxisServlet</servlet-name>  
  46.       <url-pattern>*.jws</url-pattern>  
  47.   </servlet-mapping>  
  48.   
  49.   <servlet-mapping>  
  50.       <servlet-name>AxisServlet</servlet-name>  
  51.       <url-pattern>/services/*</url-pattern>  
  52.   </servlet-mapping>  
  53.   
  54.   <servlet-mapping>  
  55.       <servlet-name>AxisAdminServlet</servlet-name>  
  56.       <url-pattern>/axis2-admin/*</url-pattern>  
  57.   </servlet-mapping>  

 

 

将tomcat生成的axis2文件夹中的axis2-web文件放置到项目的WebContent的文件夹下。

4:服务端代码分析:

 

  (1)ExtensionMapper:将实体类数据映射为XML文件

  (2)GetScoreById:接口方法getScoreById的参数对象

    (3)  GetScoreByIdResponse:接口方法getScoreById的返回值对象

 (4)IWebServiceMessageReceiverInOut 这个类,负责远程数据发送和接收

(5)IWebServiceSkeleton:服务器接口实现类,负责实现IWebService的接口IWebServiceSkeleton类,所有可以在该类上定义发布的方法,代码如下

 

 

   5:WEB-INF/services下新建 test(可以是任何文件夹都可以)/META-INF路径,将生成的resources下的2个文件拷贝到  test/META-INF的文件夹下。例如:

       

 

 

5:启动tomcat后访问:

http://localhost:8080/WebService/services/IWebService.wsdl能看到服务信息了。  到此Axis2的WebService服务已成功发布。

其中IWebService是IWebService.wsdl中定义的<service name="IWebService">service的名称

注意:看懂webservice的使用说明书,记住要从下向上看。

 

Axis2客户端调用:

下面看看利用axis2客户端调用实例  

第一步:客户端程序需要的jar包(为了测试方便全部拷贝axis2 lib下jar包也拷到项目的lib包下)

 

第二步:生成客户端代码

选择axis2的代码生成器,点击【下一步】

选择从wsdl文件生成java代码

选择桌面的services.wsdl文件

选择默认default,即生成客户端代码

选择客户端的程序目录,点击【完成】

 

 

选择项目,刷新,会生成客户端代码

jar包

 

客户端没有Skeleton类 (业务接口实现) ,多了 IWebSystemDDLServiceStub 客户端测试类

客户端程序,使用 IWebServiceStub.java来编写

在客户端的测试程序中使用:代码如下

 

[html]   
 
  1. </pre><pre name="code" class="html">package Test;  
  2.   
  3. import java.rmi.RemoteException;  
  4.   
  5. import cn.test.domain.xsd.Score;  
  6. import cn.test.webservice.GetScoreById;  
  7. import cn.test.webservice.GetScoreByIdResponse;  
  8. import cn.test.webservice.IWebServiceStub;  
  9.   
  10. public class Test {  
  11.     public static void main(String[] args) throws RemoteException {  
  12.         /***调用网络服务axis调用webservice**/  
  13.         IWebServiceStub iWebServiceStub = new IWebServiceStub("http://192.168.1.104:8080/WebService/services/IWebService");  
  14.         
  15.         //传递参数  
  16.         GetScoreById getScoreById = new GetScoreById();  
  17.         getScoreById.setArgs0(1);  
  18.           
  19.         传递参数返回结果  
  20.         GetScoreByIdResponse getScoreByIdResponse = iWebServiceStub.getScoreById(getScoreById);  
  21.         Score[] get_return = getScoreByIdResponse.get_return();  
  22.           
  23.         for (int i = 0; i get_return.length; i++) {  
  24.             System.out.println("id:" +get_return[i].getId()+" score:"+get_return[i].getScore());  
  25.         }  
  26.       
  27.     }  
  28. }  

代码下载:

转载于:https://www.cnblogs.com/kakawei/p/5998123.html

你可能感兴趣的文章
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
LUOGU P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>
access remote libvirtd
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
Haskell学习-高阶函数
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
Boosting(提升方法)之AdaBoost
查看>>
链接元素<a>
查看>>
Binding object to winForm controller through VS2010 Designer(通过VS2010设计器将对象绑定到winForm控件上)...
查看>>
Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)
查看>>
第二章:webdriver 控制浏览器窗口大小
查看>>
【动态规划】流水作业调度问题与Johnson法则
查看>>
Python&Selenium&Unittest&BeautifuReport 自动化测试并生成HTML自动化测试报告
查看>>
活现被翻转生命
查看>>