axis发布webService

来源:互联网 发布:生产玩具知乎 编辑:程序博客网 时间:2024/05/18 22:52

用axis来发布webservice

首先下载必须的jar包 分别是:axis.jar    axis-ant.jar   commons-discovery-0.2.jar    commons-logging-1.0.4.jar   wsdl4j-1.5.1.jar  wsdl4j-1.6.2.jar

下载完jar包后则在web.xml中配置servlet拦截器:

[html] view plain copy
  1.     <servlet>  
  2.     <servlet-name>AxisServlet</servlet-name>  
  3.     <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>  
  4. </servlet>  
  5.   
  6. <servlet-mapping>  
  7.     <servlet-name>AxisServlet</servlet-name>  
  8.     <url-pattern>/djk/*</url-pattern>  
  9. </servlet-mapping>  

配置这个拦截器的目的是请求走给axis处理


然后新建一个xml文件放在和web.xml同级目录 名字写成server-config.wsdd

内容如下:

[html] view plain copy
  1. <!-- Use this file to deploy some handlers/chains and services      -->  
  2. <!-- Two ways to do this:                                           -->  
  3. <!--   java org.apache.axis.client.AdminClient deploy.wsdd          -->  
  4. <!--      after the axis server is running                          -->  
  5. <!-- or                                                             -->  
  6. <!--   java org.apache.axis.utils.Admin client|server deploy.wsdd   -->  
  7. <!--      from the same directory that the Axis engine runs         -->  
  8.   
  9. <ns1:deployment xmlns="http://xml.apache.org/axis/wsdd/"  
  10.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="http://xml.apache.org/axis/wsdd/">  
  11.   
  12.     <ns1:globalConfiguration>  
  13.         <ns1:parameter name="sendMultiRefs" value="true" />  
  14.         <ns1:parameter name="disablePrettyXML" value="true" />  
  15.         <ns1:parameter name="adminPassword" value="admin" />  
  16.         <ns1:parameter name="dotNetSoapEncFix" value="true" />  
  17.         <ns1:parameter name="enableNamespacePrefixOptimization"  
  18.             value="false" />  
  19.         <ns1:parameter name="sendXMLDeclaration" value="true" />  
  20.         <ns1:parameter name="sendXsiTypes" value="true" />  
  21.         <ns1:parameter name="attachments.implementation"  
  22.             value="org.apache.axis.attachments.AttachmentsImpl" />  
  23.         <ns1:requestFlow>  
  24.             <ns1:handler type="java:org.apache.axis.handlers.JWSHandler">  
  25.                 <ns1:parameter name="scope" value="session" />  
  26.             </ns1:handler>  
  27.             <ns1:handler type="java:org.apache.axis.handlers.JWSHandler">  
  28.                 <ns1:parameter name="scope" value="request" />  
  29.                 <ns1:parameter name="extension" value=".jwr" />  
  30.             </ns1:handler>  
  31.         </ns1:requestFlow>  
  32.     </ns1:globalConfiguration>  
  33.     <ns1:handler name="URLMapper"  
  34.         type="java:org.apache.axis.handlers.http.URLMapper" />  
  35.     <ns1:handler name="LocalResponder"  
  36.         type="java:org.apache.axis.transport.local.LocalResponder" />  
  37.     <ns1:handler name="Authenticate"  
  38.         type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />  
  39.   
  40.     <!-- Services from BisServiceService WSDL service -->  
  41.     <ns1:service name="DjkWebService" provider="java:RPC" style="rpc" use="encoded">  
  42.       <ns1:parameter name="wsdlTargetNamespace" value="http://unifBoss.iptv.nyl.com" />  
  43.       <ns1:parameter name="wsdlServiceElement" value="DjkServiceService" />  
  44.       <ns1:parameter name="schemaUnqualified" value="http://unifBoss.iptv.nyl.com,http://bean.unifBoss.iptv.nyl.com" />  
  45.       <ns1:parameter name="wsdlServicePort" value="DjkWebService"/>  
  46.       <ns1:parameter name="className" value="com.djk.service.impl.DjkServiceImpl"/>  
  47.       <ns1:parameter name="wsdlPortType" value="DjkService" />  
  48.       <ns1:parameter name="typeMappingVersion" value="1.2" />  
  49.       <ns1:operation name="createUser" qname="operNS:createUser" xmlns:operNS="http://unifBoss.iptv.nyl.com" returnQName="createUserReturn" returnType="rtns:ResultBean" xmlns:rtns="http://bean.unifBoss.iptv.nyl.com" soapAction="" >  
  50.         <ns1:parameter qname="custBean" type="tns:CustBean" xmlns:tns="http://bean.unifBoss.iptv.nyl.com" />  
  51.         <ns1:parameter qname="sequenceID" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema" />  
  52.       </ns1:operation>  
  53.       <ns1:parameter name="allowedMethods" value="createUser" />  
  54.   
  55.       <typeMapping  
  56.         xmlns:ns="http://bean.unifBoss.iptv.nyl.com"  
  57.         qname="ns:ResultBean"  
  58.         type="java:com.djk.service.bean.ResultBean"  
  59.         serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  60.         deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"  
  61.         encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  62.       />  
  63.       <typeMapping  
  64.         xmlns:ns="http://bean.unifBoss.iptv.nyl.com"  
  65.         qname="ns:CustBean"  
  66.         type="java:com.djk.service.bean.CustBean"  
  67.         serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"  
  68.         deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"  
  69.         encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  70.       />  
  71.     </ns1:service>  
  72.     
  73.     <ns1:transport name="http">  
  74.         <ns1:requestFlow>  
  75.             <ns1:handler type="URLMapper" />  
  76.             <ns1:handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />  
  77.         </ns1:requestFlow>  
  78.         <ns1:parameter name="qs:list"  
  79.             value="org.apache.axis.transport.http.QSListHandler" />  
  80.         <ns1:parameter name="qs:wsdl"  
  81.             value="org.apache.axis.transport.http.QSWSDLHandler" />  
  82.         <ns1:parameter name="qs.list"  
  83.             value="org.apache.axis.transport.http.QSListHandler" />  
  84.         <ns1:parameter name="qs.method"  
  85.             value="org.apache.axis.transport.http.QSMethodHandler" />  
  86.         <ns1:parameter name="qs:method"  
  87.             value="org.apache.axis.transport.http.QSMethodHandler" />  
  88.         <ns1:parameter name="qs.wsdl"  
  89.             value="org.apache.axis.transport.http.QSWSDLHandler" />  
  90.     </ns1:transport>  
  91.     <ns1:transport name="local">  
  92.         <ns1:responseFlow>  
  93.             <ns1:handler type="LocalResponder" />  
  94.         </ns1:responseFlow>  
  95.     </ns1:transport>  
  96. </ns1:deployment>  

    <ns1:service name="DjkWebService" provider="java:RPC" style="rpc" use="encoded">表示这个webservice的服务名称是DjkWebService请求这个webservice的时候可以写成www.xx.xxx.xxx.xx:8080/xxx/djk/DjkWebService


      <ns1:parameter name="className" value="com.djk.service.impl.DjkServiceImpl"/>对应接口的实现类

    <ns1:operation name="createUser" qname="operNS:createUser" xmlns:operNS="http://unifBoss.iptv.nyl.com" returnQName="createUserReturn" returnType="rtns:ResultBean" xmlns:rtns="http://bean.unifBoss.iptv.nyl.com" soapAction="" >        <ns1:parameter qname="custBean" type="tns:CustBean" xmlns:tns="http://bean.unifBoss.iptv.nyl.com" />        <ns1:parameter qname="sequenceID" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema" />      </ns1:operation>

operation name="createUser"对应接口中的方法  。returnType="rtns:ResultBean"对应方法的返回值

      <ns1:parameter name="allowedMethods" value="createUser" />表示createUser这个方法发布

   <typeMapping        xmlns:ns="http://bean.unifBoss.iptv.nyl.com"        qname="ns:ResultBean"        type="Java:com.djk.service.bean.ResultBean"        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"      /> 

表示返回bean对应的java类的路径

<typeMapping        xmlns:ns="http://bean.unifBoss.iptv.nyl.com"        qname="ns:CustBean"        type="java:com.djk.service.bean.CustBean"        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"      />

表示参数CustBean对应的java类的路径

这样webservice的一个xml文件写完

接着写java类和接口

[java] view plain copy
  1. import com.djk.service.DjkService;  
  2. import com.djk.service.bean.CustBean;  
  3. import com.djk.service.bean.ResultBean;  
  4.   
  5. public class DjkServiceImpl   implements DjkService  
  6. {  
  7.   
  8.     public  ResultBean createUser(CustBean custBean,String sequenceID)   
  9.     {  
  10.           
  11.         System.out.println(custBean.getId());  
  12.         System.out.println(custBean.getName());  
  13.           
  14.         ResultBean  resultBean= new ResultBean();  
  15.         resultBean.setReturnCode("0");  
  16.         resultBean.setReturnMessage("ok");  
  17.         return resultBean;  
  18.     }  
  19.   
  20. }  

这个service对应在xml文件中配置过 里面的方法也配置过

接着看2个实体类:

[java] view plain copy
  1. package com.djk.service.bean;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import org.apache.axis.description.TypeDesc;  
  6.   
  7. /** 
  8.  * 返回数据bean 
  9.  * @author djk 
  10.  * 
  11.  */  
  12. public class ResultBean implements Serializable  
  13. {  
  14.   
  15.     /** 
  16.      *  
  17.      */  
  18.     private static final long serialVersionUID = 434303728726404199L;  
  19.       
  20.     // Type metadata  
  21.     private static TypeDesc typeDesc = new TypeDesc(  
  22.             ResultBean.classtrue);  
  23.       
  24.     /** 
  25.      * 返回码 
  26.      */  
  27.     private String returnCode;  
  28.       
  29.     /** 
  30.      * 返回信息 
  31.      */  
  32.     private String returnMessage;  
  33.   
  34.     static  
  35.     {  
  36.         typeDesc.setXmlType(new javax.xml.namespace.QName("DjkWebService""resultBean"));  
  37.         org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();  
  38.         elemField.setFieldName("returnCode");  
  39.         elemField.setXmlName(new javax.xml.namespace.QName("""returnCode"));  
  40.         elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema""string"));  
  41.         elemField.setMinOccurs(0);  
  42.         elemField.setNillable(false);  
  43.         typeDesc.addFieldDesc(elemField);  
  44.         elemField = new org.apache.axis.description.ElementDesc();  
  45.         elemField.setFieldName("returnMessage");  
  46.         elemField.setXmlName(new javax.xml.namespace.QName("""returnMessage"));  
  47.         elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema""string"));  
  48.         elemField.setMinOccurs(0);  
  49.         elemField.setNillable(false);  
  50.         typeDesc.addFieldDesc(elemField);  
  51.     }  
  52.   
  53.     public String getReturnCode() {  
  54.         return returnCode;  
  55.     }  
  56.   
  57.     public void setReturnCode(String returnCode) {  
  58.         this.returnCode = returnCode;  
  59.     }  
  60.   
  61.     public String getReturnMessage() {  
  62.         return returnMessage;  
  63.     }  
  64.   
  65.     public void setReturnMessage(String returnMessage) {  
  66.         this.returnMessage = returnMessage;  
  67.     }  
  68.   
  69. }  


[java] view plain copy
  1. package com.djk.service.bean;  
  2.   
  3. import org.apache.axis.description.TypeDesc;  
  4.   
  5. /** 
  6.  * 用户类 
  7.  * @author djk 
  8.  * 
  9.  */  
  10. public class CustBean   
  11. {  
  12.     /** 
  13.      * 编号 
  14.      */  
  15.     private String id;  
  16.       
  17.     /** 
  18.      * 名称 
  19.      */  
  20.     private String name;  
  21.       
  22.       
  23.     private static TypeDesc typeDesc = new TypeDesc(  
  24.             CustBean.classtrue);  
  25.       
  26.     static  
  27.     {  
  28.         typeDesc.setXmlType(new javax.xml.namespace.QName("DjkWebService""custBean"));  
  29.         org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();  
  30.         elemField.setFieldName("id");  
  31.         elemField.setXmlName(new javax.xml.namespace.QName("""id"));  
  32.         elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema""string"));  
  33.         elemField.setMinOccurs(0);  
  34.         elemField.setNillable(false);  
  35.         typeDesc.addFieldDesc(elemField);  
  36.         elemField = new org.apache.axis.description.ElementDesc();  
  37.         elemField.setFieldName("name");  
  38.         elemField.setXmlName(new javax.xml.namespace.QName("""name"));  
  39.         elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema""string"));  
  40.         elemField.setMinOccurs(0);  
  41.         elemField.setNillable(false);  
  42.         typeDesc.addFieldDesc(elemField);  
  43.     }  
  44.   
  45.     public String getId() {  
  46.         return id;  
  47.     }  
  48.   
  49.     public void setId(String id) {  
  50.         this.id = id;  
  51.     }  
  52.   
  53.     public String getName() {  
  54.         return name;  
  55.     }  
  56.   
  57.     public void setName(String name) {  
  58.         this.name = name;  
  59.     }  
  60.       
  61.       
  62.       
  63. }  

这样一个webservice工程就结束了 对应的wsdl文件是:

[html] view plain copy
  1. <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:unif="http://unifBoss.iptv.nyl.com">  
  2.    <soapenv:Header/>  
  3.    <soapenv:Body>  
  4.       <unif:createUser soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">  
  5.          <custBean xsi:type="bean:CustBean" xmlns:bean="http://bean.unifBoss.iptv.nyl.com">  
  6.             <id xsi:type="xsd:string">1</id>  
  7.             <name xsi:type="xsd:string">djk</name>  
  8.          </custBean>  
  9.          <sequenceID xsi:type="xsd:string">123131</sequenceID>  
  10.       </unif:createUser>  
  11.    </soapenv:Body>  
  12. </soapenv:Envelope>  

可以使用soapUI进行测试

附摘:

Axis 简单说明

1,axis本身可以servlet的形式集成到任何支持servlet的Web容器(web.xml)

<servlet>  <display-name>Apache-Axis Servlet</display-name>  <servlet-name>AxisServlet</servlet-name>  <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>  </servlet>

2,当然需要让Web容器找到org.apache.axis.transport.http.AxisServlet

将axis所需库和资源配置到classpath里面
或者将axis的lib目录拷贝到WEB-INFO下

3,然后让axis接管WebService的url(web.xml)

<servlet-mapping>  <servlet-name>AxisServlet</servlet-name>  <url-pattern>*.jws</url-pattern>  </servlet-mapping> <servlet-mapping>  <servlet-name>AxisServlet</servlet-name>  <url-pattern>/services/*</url-pattern>  </servlet-mapping>

4,剩下的只需要告诉axis每个WebService对应着哪个Java类即可(server-config.wsdd(与web.xml同目录))

<service name="OrganizationWebService" type="" provider="java:RPC" style="rpc" use="encoded">  <parameter name="scope" value="Request" />  <parameter name="className" value="nucleus.organization.webservice.OrganizationWebService" />  <parameter name="allowedMethods" value="isValid, personOfID, personsOfRole, queryCategories, queryPersons" />  <namespace>http://webservice.organization.nucleus</namespace>  <typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:CategoryInfo"languageSpecificType="java:nucleus.organization.webservice.CategoryInfo" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"name="CategoryInfo" xmlns:ns1="http://webservice.organization.nucleus" />  </service>
原创粉丝点击