zoukankan      html  css  js  c++  java
  • 13.Axis创建webservice客户端和服务端

    转自:https://blog.csdn.net/chenghui0317/article/details/9318317

    一、Axis的介绍

    Web Service是现在最适合实现SOA的技术,而Axis是实现Web Service的一种技术框架(架构)。

    二、Axis的准备条件

    所需要的jar包:

        axis.jar

        jaxrpc.jar

       saaj.jar

       wsdl4j-1.5.1.jar

       commons-discovery-0.2.jar

       xbean.jar

    下载地址:http://download.csdn.net/detail/ch656409110/5747129

    三、创建webservice服务端

    1、先将jar包放入lib目录

    2、在web.xml中配置axis监听器和核心servlet


    1. <!-- axis配置 -->  
    2. <listener>  
    3.   <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>  
    4. </listener>  
    5. <servlet>  
    6.   <display-name>Apache-Axis Servlet</display-name>  
    7.   <servlet-name>AxisServlet</servlet-name>  
    8.   <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>  
    9. </servlet>  
    10. <servlet>  
    11.   <display-name>Axis Admin Servlet</display-name>  
    12.   <servlet-name>AdminServlet</servlet-name>  
    13.   <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>  
    14.   <load-on-startup>100</load-on-startup>  
    15. </servlet>  
    16. <servlet-mapping>  
    17.   <servlet-name>AxisServlet</servlet-name>  
    18.   <url-pattern>/servlet/AxisServlet</url-pattern>  
    19. </servlet-mapping>  
    20. <servlet-mapping>  
    21.   <servlet-name>AxisServlet</servlet-name>  
    22.   <url-pattern>/services/*</url-pattern>  
    23. </servlet-mapping>  

    3、创建一个xml, 名字叫server-config.wsdd 放在WEB-INF根目录

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2.   
    3. <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
    4.     <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>  
    5.     
    6.     <service name="houseWebService" provider="java:RPC">  
    7.         <parameter name="allowedMethods" value="*"/>  
    8.         <parameter name="className" value="com.struts2.webservice.server.HouseWebServiceImpl"/>  
    9.     </service>  
    10.    
    11.     <transport name="http">  
    12.         <requestFlow>  
    13.             <handler type="URLMapper"/>  
    14.         </requestFlow>  
    15.     </transport>  
    16. </deployment>  

    4、根据配置再创建webservice服务端的实现类

    1、定义接口HouseWebService.java 

    public String getHouseList(String xmlStr);

    2、实现该接口HouseWebServiceImpl.java 

    可以随便返回一些字符串即可。

    5、保存,发布项目,启动tomcat

    在地址栏输入:http://localhost:8080/house/services/houseWebService?wsdl  即可看到发布的服务端的明细。

    如下:


    这就表示Axis发布的webservice服务端成功了。

    6、通过客户端调用服务端webservice


    1.     /** 
    2.      * 调用webservice路口 
    3.      * @param endpoint 地址 
    4.      * @param methodName 调用的方法 
    5.      * @param xmlStr 传递的xml字符串参数 
    6.      * @return 
    7.      */  
    8.     public String invoke(String endpoint,String methodName,String xmlStr){  
    9.         Service service = new Service();  
    10.         Call call = null;  
    11.         try {  
    12.             call = (Call) service.createCall();  
    13.         } catch (ServiceException e) {  
    14.             e.printStackTrace();  
    15.         }  
    16.         QName qn = new QName(methodName);  
    17.         call.setOperationName(qn);  
    18.         call.setTargetEndpointAddress(endpoint);  
    19.         call.setUseSOAPAction(true);  
    20.         String result = "";  
    21.         try {  
    22.             // 给方法传递参数,并且调用方法  
    23.             result = (String) call.invoke(new Object[] { xmlStr });  
    24.         } catch (RemoteException e) {  
    25.             e.printStackTrace();  
    26.         }  
    27.         System.out.println("result is " + result);  
    28.         return result;  
    29.     }  
    30.   
    31. public List<House> getHouseList() {  
    32.         String xmlStr = "<?xml version="1.0" encoding="UTF-8"?>"  
    33.                  + " <house>"  
    34.                  + "   <condition>"  
    35.                  + "     <title>便宜</title>"  
    36.                  + "     <price></price>"  
    37.                  + "     <streetname></streetname>"  
    38.                  + "    <typename></typename>"  
    39.                  + "    <floorage>100</floorage>"  
    40.                  + "    <pageno></pageno>"  
    41.                  + "    <pagesize></pagesize>"  
    42.                  + "   </condition>"  
    43.                  + " </house>";  
    44.         String result = invoke("http://localhost:8080/house/services/houseWebService","getHouseList",xmlStr);  
    45. }  


    在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。


    如果用axis调用axis的服务端使用使用起来很方便,但是调用cxf的服务端容易出错。

    比如:如果在调用的时候没有指定命名空间,就不行。

    在调用的时候不指定调用的参数以及返回的结果类型,就收不到客户端发送的参数。可以看看:http://blog.csdn.net/ch656409110/article/details/9310789


  • 相关阅读:
    Hadoop 解除 “Name node is in safe mode”
    ubuntu永久修改主机名
    ssh免密码登录
    su 和 su- 会影响环境变量
    卸载ubuntu自带openJDK,更改成自己的JDK版本
    ubuntu安装jdk 1.6
    147.Insertion Sort List
    145.Binary Tree Postorder Traversal
    144.Binary Tree Preorder Traversal
    143.Reorder List
  • 原文地址:https://www.cnblogs.com/sharpest/p/7856479.html
Copyright © 2011-2022 走看看