WebService的简单实例

来源:互联网 发布:python append用法 编辑:程序博客网 时间:2024/05/22 15:00
通常情况下,我们创建的WebService服务是以aar包的形式发布到服务器上的,为了简化我们的发布过程,写一个ant脚本是理所当然的了,当然你也可以连WebService的客户端测试脚本一起写好,下面就是我做的
xml 代码
  1. <project basedir="." default="generate.service">  
  2.     <property environment="env"/>  
  3.     <property name="AXIS2_HOME" value="${env.AXIS2_HOME}"/>  
  4.     <property name="build.dir" value="build"/>  
  5.     <path id="axis2.classpath">  
  6.         <fileset dir="${AXIS2_HOME}/lib">  
  7.             <include name="*.jar"/>  
  8.         fileset>  
  9.     path>  
  10.  <path id="client.class.path">  
  11.   <fileset dir="${AXIS2_HOME}/lib">  
  12.    <include name="*.jar" />  
  13.   fileset>  
  14.   <pathelement location="${build.dir}/classes" />  
  15.  path>  
  16.     <target name="compile">  
  17.         <mkdir dir="${build.dir}"/>  
  18.         <mkdir dir="${build.dir}/classes"/>  
  19.         <!---->  
  20.         <javac debug="on"    
  21.                fork="true"  
  22.                destdir="${build.dir}/classes"    
  23.                srcdir="${basedir}/src"  
  24.                classpathref="axis2.classpath">  
  25.         javac>  
  26.     target>  
  27.     <target name="generate.service" depends="compile">  
  28.         <!---->  
  29.         <copy toDir="${build.dir}/classes" failonerror="false">  
  30.             <fileset dir="${basedir}/resources">  
  31.                 <include name="**/*.xml"/>  
  32.                 <include name="**/*.wsdl"/>  
  33.             fileset>  
  34.         copy>  
  35.         <jar destfile="${build.dir}/HelloWorldService.aar">  
  36.             <fileset excludes="**/Test.class" dir="${build.dir}/classes"/>  
  37.         jar>  
  38.     target>  
  39.     <target name="run.client" depends="compile">  
  40.         <java classname="samples.helloworld.client.HelloWorldClient">  
  41.             <classpath refid="client.class.path" />  
  42.         java>  
  43.     target>  
  44.     <target name="clean">  
  45.         <delete dir="${build.dir}"/>  
  46.     target>  
  47. project>  
WebService的服务提供类如下:
java 代码
  1. package samples.helloworld.service.axiom;   
  2. import java.util.ArrayList;   
  3. import java.util.HashMap;   
  4. import java.util.Iterator;   
  5. import org.apache.axiom.om.OMElement;   
  6. import org.apache.axiom.om.OMAbstractFactory;   
  7. import org.apache.axiom.om.OMNamespace;   
  8. import org.apache.axiom.om.OMFactory;   
  9. import javax.xml.stream.XMLStreamException;   
  10. /**  
  11.  *   
  12.  *   
  13. Description:   
  14.  
  15.  
  16.  * @author Danlley Wei  
  17.  * @version 1.0  
  18.  * @date 2007-4-5  
  19.  */  
  20. public class HelloWorldService{   
  21.     private HashMapmessages=new HashMap();//存放用户信息   
  22.     public static final String URL="http://axiom.service.helloworld.samples/xsd";   
  23.     public static final String NS="ns";   
  24.     OMFactory fac=OMAbstractFactory.getOMFactory();//初始化工厂   
  25.     OMNamespace omNs=fac.createOMNamespace(URL,NS);//生成命名空间   
  26.     /**  
  27.      * 说明:客户端请求授权信息时调用的接口  
  28.      * @param element 用来接收客户端的XML信息  
  29.      * @return  
  30.      * @throws XMLStreamException  
  31.      */  
  32.     public OMElement getHelloWorldMs(OMElement element)throws XMLStreamException{   
  33.         try{   
  34.             element.build();   
  35.             element.detach();   
  36.             ArrayList dataLi=new ArrayList();   
  37.             String symbol=null;   
  38.             String userPWD=null;   
  39.             String transactionKey=null;   
  40.             for(Iterator it=element.getChildElements();it.hasNext();){   
  41.                 OMElement temp=(OMElement)it.next();   
  42.                 if(temp.getLocalName().equalsIgnoreCase("symbol")){   
  43.                     symbol=temp.getText();   
  44.                 }   
  45.                 if(temp.getLocalName().equalsIgnoreCase("userPWD")){   
  46.                     userPWD=temp.getText();   
  47.                 }   
  48.                 if(temp.getLocalName().equalsIgnoreCase("transactionKey")){   
  49.                     transactionKey=temp.getText();   
  50.                 }   
  51.                 if(null!=userPWD)dataLi.add(userPWD);   
  52.                 if(null!=transactionKey)dataLi.add(transactionKey);   
  53.                 if(null!=symbol)dataLi.add(symbol);   
  54.             }   
  55. //            System.out.println("********"+symbol+" | "+userPWD+" | "+transactionKey+" | "+"********");   
  56.             element=responseMessage("getHelloWorldMsResponse",symbol,userPWD,transactionKey);//产生应答信息   
  57.             return element;   
  58.         }catch(Exception e){   
  59.             e.printStackTrace();   
  60.             throw new XMLStreamException();   
  61.         }   
  62.     }   
  63.        
  64.     /**  
  65.      * 说明:此方法无返回值,用于初始化用户帐号信息  
  66.      *   
  67.      * @param element  
  68.      * @throws XMLStreamException  
  69.      */  
  70.     public void setHelloWorldMs(OMElement element)throws XMLStreamException{   
  71.         try{   
  72.             element.build();   
  73.             element.detach();   
  74.             String symbol=null;   
  75.             String userPWD=null;   
  76.             String transactionKey=null;   
  77.             ArrayList dataLi=new ArrayList();   
  78.             for(Iterator iter=element.getChildElements();iter.hasNext();){   
  79.                 OMElement tmp=(OMElement)iter.next();   
  80.                 if(tmp.getLocalName().equalsIgnoreCase("symbol")){   
  81.                     symbol=tmp.getText();   
  82.                 }   
  83.                 if(tmp.getLocalName().equalsIgnoreCase("userPWD")){   
  84.                     userPWD=tmp.getText();   
  85.                 }   
  86.                 if(tmp.getLocalName().equalsIgnoreCase("transactionKey")){   
  87.                     transactionKey=tmp.getText();   
  88.                 }   
  89.                 if(null!=userPWD)dataLi.add(userPWD);   
  90.                 if(null!=transactionKey)dataLi.add(transactionKey);   
  91.                 if(null!=symbol)dataLi.add(symbol);   
  92.             }   
  93.             if(!messages.containsKey(symbol)){   
  94.                 messages.put(symbol,dataLi);   
  95.                 System.out.println("********  add user "+symbol+"   ********");   
  96.             }else{   
  97.                 System.out.println(" The userInfo already exist here ------->"+symbol);   
  98.             }   
  99.         }catch(Exception e){   
  100.             e.printStackTrace();   
  101.             throw new XMLStreamException(e);   
  102.         }   
  103.     }   
  104.        
  105.     /**  
  106.      * 说明:用于判断是否下载成功,消息产生方式与方法:  
  107.      *      getHelloWorldMs(OMElement element)throws XMLStreamException相同。  
  108.      * @param element  
  109.      * @return  
  110.      * @throws XMLStreamException  
  111.      */  
  112.     public OMElement getDownloadConfirm(OMElement element)throws XMLStreamException{   
  113.         try{   
  114.             element.build();   
  115.             element.detach();   
  116.             String symbol=null;   
  117.             String userPWD=null;   
  118.             String transactionKey=null;   
  119.             OMElement myel=element.getFirstElement();   
  120.             symbol=myel.getText();   
  121.             OMElement myel1=(OMElement)myel.getNextOMSibling();   
  122.             userPWD=myel1.getText();   
  123.             OMElement myel2=(OMElement)myel1.getNextOMSibling();   
  124.             transactionKey=myel2.getText();   
  125.             element=responseMessage("getDownloadConfirmResponse",symbol,userPWD,transactionKey);//产生应答信息   
  126.             System.out.println("**********************************************************");   
  127.             System.out.println("                  DOWNLOAD INFORMATION                    ");   
  128.             System.out.println("  the message have been sended to the Client !");   
  129.             System.out.println("**********************************************************");   
  130.             return element;   
  131.         }catch(Exception e){   
  132.             e.printStackTrace();   
  133.             throw new XMLStreamException(e);   
  134.         }   
  135.     }   
  136.        
  137.     /**  
  138.      * 说明:产生客户端请求后的应答信息,其信息为一个OMElement对象OMElement element ,其结果送给上层调用者  
  139.      *      getHelloWorldMs(OMElement element)throws XMLStreamException;  
  140.  
  141.      *      getDownloadConfirm(OMElement element)throws XMLStreamException  
  142.      * @param eleName  
  143.      * @param userName  
  144.      * @param userPWD  
  145.      * @param transactionKey  
  146.      * @return  
  147.      */  
  148.     private OMElement responseMessage(String eleName,String userName,String userPWD,String transactionKey){   
  149.         OMElement element=fac.createOMElement(eleName,omNs);   
  150.         if(cheAuthrized(userName,userPWD)){   
  151.             element=createRespElement(element,"0","Success");//产生授权成功的应答信息   
  152.         }else{   
  153.             //生成一个1~11以内的随机数,如果随机数为 0 ,则强制指定为 10 ,防止与正确的应答 code重复   
  154.             int rand=(int)(Math.random()*10);   
  155.             if(rand+Math.random()>9)rand=11;   
  156.             if(rand==0)rand=10;   
  157.             System.out.println("There are some errors occured here with the random number : "+rand);   
  158.             element=getErrorElement(rand,element);   
  159.         }   
  160.         return element;   
  161.     }   
  162.        
  163.     /**  
  164.      * 说明:根据不同的错误码,获取错误信息结点,并把结点信息送到上层调用者  
  165.      *      responseMessage(String eleName,String userName,String userPWD,String transactionKey);  
  166.      * @param errorCode  
  167.      * @param element  
  168.      * @return  
  169.      */  
  170.     private OMElement getErrorElement(int errorCode,OMElement element){   
  171.         switch(errorCode){   
  172.             case 1:   
  173.                 element=createRespElement(element,"REQUEST_ERROR","Error on the request (parameter format)");   
  174.                 break;   
  175.             case 2:   
  176.                 element=createRespElement(element,"CONTEXT_ERROR","Context errors (in this case, can be user disabled)");   
  177.                 break;   
  178.             case 3:   
  179.                 element=createRespElement(element,"SECURITY_ERROR","Wrong Credentials or Permission Denied on this API");   
  180.                 break;   
  181.             case 4:   
  182.                 element=createRespElement(element,"SECURITY_ERROR","Invalid credentials");   
  183.                 break;   
  184.             case 5:   
  185.                 element=createRespElement(element,"REQUEST_ERROR","transactionKey is required");   
  186.                 break;   
  187.             case 6:   
  188.                 element=createRespElement(element,"REQUEST_ERROR","Invalid transactionKey format");   
  189.                 break;   
  190.             case 7:   
  191.                 element=createRespElement(element,"REQUEST_ERROR","Invalid transactionKey");   
  192.                 break;   
  193.             case 8:   
  194.                 element=createRespElement(element,"CONTEXT_ERROR","transactionKey already confirmed");   
  195.                 break;   
  196.             case 9:   
  197.                 element=createRespElement(element,"CONTEXT_ERROR","transactionKey not found");   
  198.                 break;   
  199.             case 10:   
  200.                 element=createRespElement(element,"CONTEXT_ERROR","Not enough credits ");   
  201.                 break;   
  202.             default:   
  203.                 element=createRespElement(element,"APPLICATION_ERROR","Undetected error on Web Service");   
  204.                 break;   
  205.         }   
  206.         return element;   
  207.     }   
  208.        
  209.     /**  
  210.      * 说明:当服务器收到请求后做出应答响应,并将应答信息返回给客户端,该应答信息是一个xml结点,如下:  
  211.      *         
  212.      *           the response code  
  213.      *           detail information  
  214.      *         
  215.      *       此方法仅仅用于生成如上结构的结点,并将处理后的结果转交给上层调用者  
  216.      *       responseMessage(String eleName,String userName,String userPWD,String transactionKey);  
  217.      *       来处理  
  218.      * @param eleName  
  219.      * @param arg0  
  220.      * @param arg1  
  221.      * @return  
  222.      */  
  223.     private OMElement createRespElement(OMElement element,String arg0,String arg1){   
  224.         OMElement value1 = fac.createOMElement("Code", omNs);   
  225.         value1.addChild(fac.createOMText(value1, arg0));   
  226.         element.addChild(value1);   
  227.            
  228.         OMElement value2 = fac.createOMElement("Description", omNs);   
  229.         value2.addChild(fac.createOMText(value2, arg1));   
  230.         element.addChild(value2);   
  231.            
  232.         return element;   
  233.     }   
  234.        
  235.     /**  
  236.      * 说明:判断当前用户的账户信息是否正确,只有在用户名和密码都正确的情况下才返回true,并把结点信息送到上层调用者  
  237.      *      responseMessage(String eleName,String userName,String userPWD,String transactionKey);  
  238.      * @param userName    用户名  
  239.      * @param userPWD     密码  
  240.      * @return  
  241.      */  
  242.     private boolean cheAuthrized(String userName,String userPWD){   
  243. //        System.out.println("********"+userName+" | "+userPWD+"********");   
  244.         if(messages.containsKey(userName)&&null!=userPWD){   
  245.             ArrayList myLi=(ArrayList)messages.get(userName);   
  246.             String userPWD_chk=(String)myLi.get(1);   
  247.             if(userPWD.equals(userPWD_chk))return true;   
  248.         }   
  249.         return false;   
  250.     }   
  251. }   
  252.    
执行如下命令:

java2wsdl -cp . -cn samples.helloworld.service.axiom.HelloWorldService -of HelloWorldService.wsdl

打开生成的wsdl文件进行修改,删除文件中的下面代码:
<xs:element name="getHelloWorldMsFault"><soap:body use="literal" namespace="&amp;lt;a href=" axiom.service.helloworld.samples=" _fcksavedurl="><soap:body use="literal" namespace="&amp;lt;a href=" axiom.service.helloworld.samples=" _fcksavedurl="><soap12:body use="literal" namespace="&amp;lt;a href=" axiom.service.helloworld.samples=" _fcksavedurl="><soap12:body use="literal" namespace="&amp;lt;a href=" axiom.service.helloworld.samples=" _fcksavedurl="><soap12:body use="literal" namespace="&amp;lt;a href=" axiom.service.helloworld.samples=" _fcksavedurl=">
xml 代码
  1.         <xs:element name="getDownloadConfirmFault">  
  2.             <xs:complexType>  
  3.                 <xs:sequence>  
  4.                     <xs:element name="getDownloadConfirmFault" type="xs:anyType" />  
  5.                 xs:sequence>  
  6.             xs:complexType>  
  7.         xs:element>  
  8.   
  9.   
  10.         <xs:element
0 0
原创粉丝点击