什么是SOAP?

来源:互联网 发布:windows三维迷宫 编辑:程序博客网 时间:2024/06/10 02:59

原文地址:http://ling091.javaeye.com/blog/60963

什么是SOAP?

  SOAP是一个基于XML的用于应用程序之间通信数据编码的传输协议。最初由微软和Userland Software提出,随着不断地完善和改进,SOAP很快被业界广泛应用。

  什么是Axis?

  Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。

  配置webservice具体步骤:

  1.安装weblogic。

  2.配置一个web应用,如“//lijunjie/e$/software/bea/user_projects/domains/lijjdomain/applications/ cntapws “。

  3.从apache网站上下载axis-bin-1_2_1.tar.gz,解压后copy到cntapws下面。

  4.打开“http://localhost:7001/console“,配置cntapws 的web应用。

  5.axis1.2和weblogic8.1有冲突,原因是weblogic 本身携带的webservice.jar使用的旧的javax.xml.soap.*,而不是像axis使用J2EE1.4新的版本。解决方案是在WEB-INF/weblogic.xml文件中如下的配置:

   
 
 true


 

  6.按 http://localhost:8080/axis/happyaxis.jsp地址,可以显示你发布的webservice是否配置成功,如果显示必须的包缺失,则你的webservice不能正常运行。

  开发webservice流程

  1.写普通的java类,该类中有你要发布到webservice上的有关方法。

  2.配置server-comfig.xml, 把你要发布的方法写入该文件。具体内容如下:

xml 代码
  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.   
  5.  <globalConfiguration>  
  6.   
  7.   <parameter name="adminPassword" value="admin"/>  
  8.   
  9.   <parameter name="attachments.Directory" value="C:/eclipse/workspace/bookstore/WEB-INF/attachments"/>  
  10.   
  11.   <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>  
  12.   
  13.   <parameter name="sendXsiTypes" value="true"/>  
  14.   
  15.   <parameter name="sendMultiRefs" value="true"/>  
  16.   
  17.   <parameter name="sendXMLDeclaration" value="true"/>  
  18.   
  19.   <parameter name="axis.sendMinimizedElements" value="true"/>  
  20.   
  21.   <requestFlow>  
  22.   
  23.    <handler type="java:org.apache.axis.handlers.JWSHandler">  
  24.   
  25.     <parameter name="scope" value="session"/>  
  26.   
  27.    </handler>  
  28.   
  29.    <handler type="java:org.apache.axis.handlers.JWSHandler">  
  30.   
  31.     <parameter name="scope" value="request"/>  
  32.   
  33.     <parameter name="extension" value=".jwr"/>  
  34.   
  35.    </handler>  
  36.   
  37.   </requestFlow>  
  38.   
  39.  </globalConfiguration>  
  40.   
  41.  <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>  
  42.   
  43.  <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>  
  44.   
  45.  <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>  
  46.   
  47.  <service name="Version" provider="java:RPC">  
  48.   
  49.   <parameter name="allowedMethods" value="getVersion"/>  
  50.   
  51.   <parameter name="className" value="org.apache.axis.Version"/>  
  52.   
  53.  </service>  
  54.   
  55.  <!--要配置的内容start,注意每一个要发布成webservice的类都要配置成一个service如下à   
  56.   
  57.  <service name="webserviceproxy" provider="java:RPC">  
  58.   
  59.        <parameter name="className" value="com.copia.webservice.server.proxy.WebServiceProxy"/>  
  60.   
  61.        <parameter name="allowedMethods" value="*"/>  
  62.   
  63. <!—具体某个方法说明-->  
  64.   
  65.        <operation name="login" returnType="ns:LoginOutServiceBean">  
  66.   
  67.               <parameter name="branchNo" type="xsd:string"/>  
  68.   
  69.               <parameter name="userId" type="xsd:string"/>  
  70.   
  71.               <parameter name="password" type="xsd:string"/>  
  72.   
  73.               <parameter name="certificateNo" type="xsd:string"/>      
  74.   
  75.        </operation>  
  76.   
  77. <!—如果该方法的参数有基本类型和对象类型,则不要声明,webservice能够找到相关的类及方法-->  
  78.   
  79. <!—声明涉及到的所有类及其父类,引用类,还有它们的相关类,类似与对象树遍历,某个类声明缺失也会导致运行失败-->  
  80.   
  81.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  82.   
  83.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  84.   
  85.        qname="ns:LoginOutServiceBean"  
  86.   
  87.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  88.   
  89.        type="java:com.copia.core.module.security.login.LoginOutServiceBean" xmlns:ns="webserviceproxy"/>  
  90.   
  91.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  92.   
  93.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  94.   
  95.        qname="ns:User"  
  96.   
  97.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  98.   
  99.        type="java:com.copia.core.client.User" xmlns:ns="webserviceproxy"/>  
  100.   
  101.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  102.   
  103.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  104.   
  105.        qname="ns:GetBatchListInServiceBean"  
  106.   
  107.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  108.   
  109.        type="java:com.copia.core.module.batch.service.GetBatchListInServiceBean" xmlns:ns="webserviceproxy"/>  
  110.   
  111.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  112.   
  113.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  114.   
  115.        qname="ns:GetBatchListOutServiceBean"  
  116.   
  117.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  118.   
  119.        type="java:com.copia.core.module.batch.service.GetBatchListOutServiceBean" xmlns:ns="webserviceproxy"/>  
  120.   
  121.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  122.   
  123.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  124.   
  125.        qname="ns:BatchJobDefBean"  
  126.   
  127.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  128.   
  129.        type="java:com.copia.core.module.batch.service.BatchJobDefBean" xmlns:ns="webserviceproxy"/>          
  130.   
  131.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  132.   
  133.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  134.   
  135.        qname="ns:ValueObjectPage"  
  136.   
  137.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  138.   
  139.        type="java:com.copia.core.voa.ValueObjectPage" xmlns:ns="webserviceproxy"/>  
  140.   
  141.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  142.   
  143.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  144.   
  145.        qname="ns:ValueObjectColInfo"  
  146.   
  147.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  148.   
  149.        type="java:com.copia.core.voa.ValueObjectColInfo" xmlns:ns="webserviceproxy"/>  
  150.   
  151.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  152.   
  153.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  154.   
  155.        qname="ns:ValueObjectList"  
  156.   
  157.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  158.   
  159.        type="java:com.copia.core.voa.ValueObjectList" xmlns:ns="webserviceproxy"/>  
  160.   
  161.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  162.   
  163.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  164.   
  165.        qname="ns:PageInfo"  
  166.   
  167.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  168.   
  169.        type="java:com.copia.core.voa.PageInfo" xmlns:ns="webserviceproxy"/>  
  170.   
  171.        <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"      
  172.   
  173.        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  174.   
  175.        qname="ns:ValueObjectMetaData"  
  176.   
  177.        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  178.   
  179.        type="java:com.copia.core.voa.ValueObjectMetaData" xmlns:ns="webserviceproxy"/>  
  180.   
  181.    </service>  
  182.   
  183. <!--要配置的内容endà   
  184.   
  185.  <service name="AdminService" provider="java:MSG">  
  186.   
  187.   <parameter name="allowedMethods" value="AdminService"/>  
  188.   
  189.   <parameter name="enableRemoteAdmin" value="false"/>  
  190.   
  191.   <parameter name="className" value="org.apache.axis.utils.Admin"/>  
  192.   
  193.   <namespace>http://xml.apache.org/axis/wsdd/</namespace>  
  194.   
  195.  </service>  
  196.   
  197.  <transport name="local">  
  198.   
  199.   <responseFlow>  
  200.   
  201.    <handler type="LocalResponder"/>  
  202.   
  203.   </responseFlow>  
  204.   
  205.  </transport>  
  206.   
  207.  <transport name="http">  
  208.   
  209.   <requestFlow>  
  210.   
  211.    <handler type="URLMapper"/>  
  212.   
  213.    <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>  
  214.   
  215.   </requestFlow>  
  216.   
  217.  </transport>  
  218.   
  219. </deployment>  

  3.在地址栏输入http://localhost:7001/cntapws/services/webserviceproxy?wsdl,如没有什么错误,则表示你的webservice发布成功了。

  Java  webservice客户端编程

  1.启动你配置好的weblobic。

  2.进入dos界面,在你的临时目录(任意目录)下根据wsdl产生客户文件,如下指令:

E:/kk>java -Djava.ext.dirs=E:/software/bea/user_projects/domains/lijjdomain/appl

ications/axis/WEB-INF/axislib org.apache.axis.wsdl.WSDL2Java http://localhost:7001/cntapws/services/webserviceproxy?wsdl即可在kk目录下产生有关文件。

  3.把产生的文件copy到你的工程中,再写一个webservice调用测试类,如下:

java 代码
  1. public class TestWs {   
  2.   
  3.        public static void main(String[] args) {   
  4.   
  5.               WebServiceProxyService service = new WebServiceProxyServiceLocator();   
  6.   
  7.               try {   
  8.   
  9.                      WebServiceProxy serviceProxy = service.getwebserviceproxy();   
  10.   
  11.                      User user = new User();   
  12.   
  13.                      user.setBranchNo("000001");   
  14.   
  15.                      user.setClerkNo("1004");   
  16.   
  17.                      GetBatchListInServiceBean in = new GetBatchListInServiceBean();   
  18.   
  19.                      in.setCurPageNo(1);                  
  20.   
  21.                      String serviceName = "GetBatchListService";   
  22.   
  23.                      GetBatchListOutServiceBean out = (GetBatchListOutServiceBean)serviceProxy.getBatchListService(user, in, serviceName);   
  24.   
  25.                      BatchJobDefBean[] defBeans = out.getBatchJobDefBeans();   
  26.   
  27.                     for(int i = 0 ; i < defBeans.length ; i++){   
  28.   
  29.                             System.out.println(defBeans[i].getBatchName());   
  30.   
  31.                      }   
  32.   
  33.               }catch(Exception ex){   
  34.   
  35.                      ex.printStackTrace();   
  36.   
  37.               }   
  38.   
  39.        }   
  40.   
  41. }  

这样,我们就完成了webservice的全部工作。大功告成了

原创粉丝点击