WebService的简单实例

通常情况下,我们创建的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 代码
package samples.helloworld.service.axiom;    import java.util.ArrayList;    import java.util.HashMap;    import java.util.Iterator;    import org.apache.axiom.om.OMElement;    import org.apache.axiom.om.OMAbstractFactory;    import org.apache.axiom.om.OMNamespace;    import org.apache.axiom.om.OMFactory;    import javax.xml.stream.XMLStreamException;    /**    *     *    Description:         * @author Danlley Wei    * @version 1.0    * @date 2007-4-5    */   public class HelloWorldService{        private HashMapmessages=new HashMap();//存放用户信息        public static final String URL="http://axiom.service.helloworld.samples/xsd";        public static final String NS="ns";        OMFactory fac=OMAbstractFactory.getOMFactory();//初始化工厂        OMNamespace omNs=fac.createOMNamespace(URL,NS);//生成命名空间        /**        * 说明:客户端请求授权信息时调用的接口        * @param element 用来接收客户端的XML信息        * @return        * @throws XMLStreamException        */       public OMElement getHelloWorldMs(OMElement element)throws XMLStreamException{            try{                element.build();                element.detach();                ArrayList dataLi=new ArrayList();                String symbol=null;                String userPWD=null;                String transactionKey=null;                for(Iterator it=element.getChildElements();it.hasNext();){                    OMElement temp=(OMElement)it.next();                    if(temp.getLocalName().equalsIgnoreCase("symbol")){                        symbol=temp.getText();                    }                    if(temp.getLocalName().equalsIgnoreCase("userPWD")){                        userPWD=temp.getText();                    }                    if(temp.getLocalName().equalsIgnoreCase("transactionKey")){                        transactionKey=temp.getText();                    }                    if(null!=userPWD)dataLi.add(userPWD);                    if(null!=transactionKey)dataLi.add(transactionKey);                    if(null!=symbol)dataLi.add(symbol);                }    //            System.out.println("********"+symbol+" | "+userPWD+" | "+transactionKey+" | "+"********");                element=responseMessage("getHelloWorldMsResponse",symbol,userPWD,transactionKey);//产生应答信息                return element;            }catch(Exception e){                e.printStackTrace();                throw new XMLStreamException();            }        }                /**        * 说明:此方法无返回值,用于初始化用户帐号信息        *         * @param element        * @throws XMLStreamException        */       public void setHelloWorldMs(OMElement element)throws XMLStreamException{            try{                element.build();                element.detach();                String symbol=null;                String userPWD=null;                String transactionKey=null;                ArrayList dataLi=new ArrayList();                for(Iterator iter=element.getChildElements();iter.hasNext();){                    OMElement tmp=(OMElement)iter.next();                    if(tmp.getLocalName().equalsIgnoreCase("symbol")){                        symbol=tmp.getText();                    }                    if(tmp.getLocalName().equalsIgnoreCase("userPWD")){                        userPWD=tmp.getText();                    }                    if(tmp.getLocalName().equalsIgnoreCase("transactionKey")){                        transactionKey=tmp.getText();                    }                    if(null!=userPWD)dataLi.add(userPWD);                    if(null!=transactionKey)dataLi.add(transactionKey);                    if(null!=symbol)dataLi.add(symbol);                }                if(!messages.containsKey(symbol)){                    messages.put(symbol,dataLi);                    System.out.println("********  add user "+symbol+"   ********");                }else{                    System.out.println(" The userInfo already exist here ------->"+symbol);                }            }catch(Exception e){                e.printStackTrace();                throw new XMLStreamException(e);            }        }                /**        * 说明:用于判断是否下载成功,消息产生方式与方法:        *      getHelloWorldMs(OMElement element)throws XMLStreamException相同。        * @param element        * @return        * @throws XMLStreamException        */       public OMElement getDownloadConfirm(OMElement element)throws XMLStreamException{            try{                element.build();                element.detach();                String symbol=null;                String userPWD=null;                String transactionKey=null;                OMElement myel=element.getFirstElement();                symbol=myel.getText();                OMElement myel1=(OMElement)myel.getNextOMSibling();                userPWD=myel1.getText();                OMElement myel2=(OMElement)myel1.getNextOMSibling();                transactionKey=myel2.getText();                element=responseMessage("getDownloadConfirmResponse",symbol,userPWD,transactionKey);//产生应答信息                System.out.println("**********************************************************");                System.out.println("                  DOWNLOAD INFORMATION                    ");                System.out.println("  the message have been sended to the Client !");                System.out.println("**********************************************************");                return element;            }catch(Exception e){                e.printStackTrace();                throw new XMLStreamException(e);            }        }                /**        * 说明:产生客户端请求后的应答信息,其信息为一个OMElement对象OMElement element ,其结果送给上层调用者        *      getHelloWorldMs(OMElement element)throws XMLStreamException;          *      getDownloadConfirm(OMElement element)throws XMLStreamException        * @param eleName        * @param userName        * @param userPWD        * @param transactionKey        * @return        */       private OMElement responseMessage(String eleName,String userName,String userPWD,String transactionKey){            OMElement element=fac.createOMElement(eleName,omNs);            if(cheAuthrized(userName,userPWD)){                element=createRespElement(element,"0","Success");//产生授权成功的应答信息            }else{                //生成一个1~11以内的随机数,如果随机数为 0 ,则强制指定为 10 ,防止与正确的应答 code重复                int rand=(int)(Math.random()*10);                if(rand+Math.random()>9)rand=11;                if(rand==0)rand=10;                System.out.println("There are some errors occured here with the random number : "+rand);                element=getErrorElement(rand,element);            }            return element;        }                /**        * 说明:根据不同的错误码,获取错误信息结点,并把结点信息送到上层调用者        *      responseMessage(String eleName,String userName,String userPWD,String transactionKey);        * @param errorCode        * @param element        * @return        */       private OMElement getErrorElement(int errorCode,OMElement element){            switch(errorCode){                case 1:                    element=createRespElement(element,"REQUEST_ERROR","Error on the request (parameter format)");                    break;                case 2:                    element=createRespElement(element,"CONTEXT_ERROR","Context errors (in this case, can be user disabled)");                    break;                case 3:                    element=createRespElement(element,"SECURITY_ERROR","Wrong Credentials or Permission Denied on this API");                    break;                case 4:                    element=createRespElement(element,"SECURITY_ERROR","Invalid credentials");                    break;                case 5:                    element=createRespElement(element,"REQUEST_ERROR","transactionKey is required");                    break;                case 6:                    element=createRespElement(element,"REQUEST_ERROR","Invalid transactionKey format");                    break;                case 7:                    element=createRespElement(element,"REQUEST_ERROR","Invalid transactionKey");                    break;                case 8:                    element=createRespElement(element,"CONTEXT_ERROR","transactionKey already confirmed");                    break;                case 9:                    element=createRespElement(element,"CONTEXT_ERROR","transactionKey not found");                    break;                case 10:                    element=createRespElement(element,"CONTEXT_ERROR","Not enough credits ");                    break;                default:                    element=createRespElement(element,"APPLICATION_ERROR","Undetected error on Web Service");                    break;            }            return element;        }                /**        * 说明:当服务器收到请求后做出应答响应,并将应答信息返回给客户端,该应答信息是一个xml结点,如下:        *               *           the response code        *           detail information        *               *       此方法仅仅用于生成如上结构的结点,并将处理后的结果转交给上层调用者        *       responseMessage(String eleName,String userName,String userPWD,String transactionKey);        *       来处理        * @param eleName        * @param arg0        * @param arg1        * @return        */       private OMElement createRespElement(OMElement element,String arg0,String arg1){            OMElement value1 = fac.createOMElement("Code", omNs);            value1.addChild(fac.createOMText(value1, arg0));            element.addChild(value1);                        OMElement value2 = fac.createOMElement("Description", omNs);            value2.addChild(fac.createOMText(value2, arg1));            element.addChild(value2);                        return element;        }                /**        * 说明:判断当前用户的账户信息是否正确,只有在用户名和密码都正确的情况下才返回true,并把结点信息送到上层调用者        *      responseMessage(String eleName,String userName,String userPWD,String transactionKey);        * @param userName    用户名        * @param userPWD     密码        * @return        */       private boolean cheAuthrized(String userName,String userPWD){    //        System.out.println("********"+userName+" | "+userPWD+"********");            if(messages.containsKey(userName)&&null!=userPWD){                ArrayList myLi=(ArrayList)messages.get(userName);                String userPWD_chk=(String)myLi.get(1);                if(userPWD.equals(userPWD_chk))return true;            }            return false;        }    }       
执行如下命令:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值