免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1426 | 回复: 0
打印 上一主题 下一主题

WebService之ant脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-07 17:28 |只看该作者 |倒序浏览
通常情况下,我们创建的WebService服务是以aar包的形式发布到服务器上的,为了简化我们的发布过程,写一个ant脚本是理所当然的了,当然你也可以连WebService的客户端测试脚本一起写好,下面就是我做的

   
   

   
   
        
            
        
   

  
   
  
  

   
        
        

        
        
        
   

   
        
        
            
               
               
            
        
        
            
        
   

   
        
            
        
   

   
        
   


WebService的服务提供类如下:
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 HashMap messages=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文件进行修改,删除文件中的下面代码:
            
               
                    
                        
                    
               
            


            
               
                    
                        
                    
               


            
               
                    
                        
                    
               
            


   
        
   


   
        
   


   
        
   


            
               
            


            
               
            


            
               
            


            
               
            


            
               
            
该文件的内容如下:


  
   
   
     
      
      
      
     
   
   
   
   
     
      
     
   
   
   
   
     
      
      
      
     
   
   
   
   
     
      
     
   
   
   
   
     
      
      
      
     
   
   
  


  


  


  


  


  


  
   
   
  
  
   
   
  
  
   
  


  
  
   
   
   
   
   
   
   
  
  
   
   
   
   
   
   
   
  
  
   
   
   
   
  


  
  
   
   
   
   
   
   
   
  
  
   
   
   
   
   
   
   
  
  
   
   
   
   
  


  
   
  
  
   
  


保存文件,将其拷贝到。。。\resources\META-INF目录下,然后执行ant指令如下:
ant generate.service

提示信息如下:
Buildfile: build.xml
compile:
    [javac] Compiling 3 source files to D:\eclipse\workspace\axiomproj\build\cla
sses
generate.service:
      [jar] Warning: samples\helloworld\client\HelloWorldClient.class modified i
n the future.
      [jar] Warning: samples\helloworld\service\axiom\HelloWorldService.class mo
dified in the future.
      [jar] Warning: samples\helloworld\spring\biz\HelloSpring.class modified in
the future.
      [jar] Building jar: D:\eclipse\workspace\axiomproj\build\HelloWorldService
.aar
BUILD SUCCESSFUL
Total time: 3 seconds
说明编译打包成功!
这时在build目录下会有一个HelloWorldService.aar文件。
将该文件拷贝到:
D:\tomcat6\deploy\axis2\WEB-INF\services

接下来就需要写一段客户端测试程序来看看我们的服务是否能够正常通信
package samples.helloworld.client;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;

import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;


public class HelloWorldClient{
    EndpointReference targetEPR=new EndpointReference("

http://localhost:8080/axis2/services/HelloWorldService
");
   
    public OMElement callbckDwnLdAuthTran(String symbol,String userPWD, String transactionKey)throws Exception{
        try{
            OMFactory fac=OMAbstractFactory.getOMFactory();
            OMNamespace omNs=fac.createOMNamespace("

http://axiom.service.helloworld.sample","tns
");
            OMElement element=fac.createOMElement("getHelloWorldMs",omNs);
            
            OMElement value1 = fac.createOMElement("symbol", omNs);
            value1.addChild(fac.createOMText(value1, symbol));
            element.addChild(value1);
            
            OMElement value2=fac.createOMElement("userPWD",omNs);
            value2.addChild(fac.createOMText(value2,userPWD));
            element.addChild(value2);
            
            OMElement value3 = fac.createOMElement("transactionKey", omNs);
            value3.addChild(fac.createOMText(value3,transactionKey));
            element.addChild(value3);
            
            Options options=new Options();
            options.setTo(targetEPR);
            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
            ServiceClient sender=new ServiceClient();
            sender.setOptions(options);
            OMElement result=sender.sendReceive(element);
            System.out.print(" waiting server response ............");
            Thread.sleep(300);
            System.out.println();
            String code=null;
            String description=null;
//            String response=result.getFirstElement().getText();
            OMElement symbolElement=result.getFirstElement();
            code=symbolElement.getText();
            OMElement priceElement=(OMElement)symbolElement.getNextOMSibling();
            description=priceElement.getText();
            System.out.println("Current Hello World of response--------->"+code);
            System.out.println("********"+"    Server Response    "+"**********");
            System.out.println("           Code : "+code+"");
            System.out.println("           description : "+description+"");
            System.out.println("******************************************");
            System.out.println("\n\n\n");
            return element;
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }
    }
   
    public OMElement setHelloWorld(String symbol,String userPWD, String transactionKey)throws Exception{
        try{
            OMFactory fac = OMAbstractFactory.getOMFactory();
            OMNamespace omNs = fac.createOMNamespace("

http://axiom.service.helloworld.samples
", "tns");
            OMElement method = fac.createOMElement("setHelloWorldMs", omNs);
            
            OMElement value1 = fac.createOMElement("symbol", omNs);
            value1.addChild(fac.createOMText(value1, symbol));
            method.addChild(value1);
            
            OMElement value2=fac.createOMElement("userPWD",omNs);
            value2.addChild(fac.createOMText(value2,userPWD));
            method.addChild(value2);
            
            OMElement value3 = fac.createOMElement("transactionKey", omNs);
            value3.addChild(fac.createOMText(value3,transactionKey));
            method.addChild(value3);
            
            Options options=new Options();
            options.setTo(targetEPR);
            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
            ServiceClient sender=new ServiceClient();
            sender.setOptions(options);
            sender.fireAndForget(method);
            System.out.println("------------>DONE !");
            Thread.sleep(300);
            return method;
        }catch(Exception e){
            e.printStackTrace();
            throw new Exception();
        }
    }
   
    public OMElement calChkDnLDConfirm(String symbol,String userPWD, String transactionKey)throws Exception{
        try{
            OMFactory fac=OMAbstractFactory.getOMFactory();
            OMNamespace omNs=fac.createOMNamespace("

http://axiom.service.helloworld.samples","tns
");
            OMElement element=fac.createOMElement("getDownloadConfirm",omNs);
            
            OMElement value1 = fac.createOMElement("symbol", omNs);
            value1.addChild(fac.createOMText(value1, symbol));
            element.addChild(value1);
            
            OMElement value2=fac.createOMElement("userPWD",omNs);
            value2.addChild(fac.createOMText(value2,userPWD));
            element.addChild(value2);
            
            OMElement value3 = fac.createOMElement("transactionKey", omNs);
            value3.addChild(fac.createOMText(value3,transactionKey));
            element.addChild(value3);
            Options options=new Options();
            options.setTo(targetEPR);
            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
            ServiceClient sender=new ServiceClient();
            sender.setOptions(options);
            OMElement response=sender.sendReceive(element);
            Thread.sleep(300);
            OMElement va1=response.getFirstElement();
            String code=va1.getText();
            String val=((OMElement)va1.getNextOMSibling()).getText();
            System.out.println("Download confirm information --------->"+code);
            System.out.println("********"+"    Server Response    "+"**********");
            System.out.println("           Code : "+code+"");
            System.out.println("           description : "+val+"");
            System.out.println("******************************************");
            System.out.println("\n\n\n");
            return element;
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }
    }
   
    public static void main(String[] args){
        HelloWorldClient helloWorldClient=new HelloWorldClient();
        try{
            helloWorldClient.setHelloWorld("Danlley","das4353dstg3t","324134321");
            helloWorldClient.callbckDwnLdAuthTran("Danlley","das4353dstg3t","324134321");
            for(int i=0;i

执行 ant run.client 后,运行结果如下:
Buildfile: build.xml
compile:
    [javac] Compiling 3 source files to D:\eclipse\workspace\axiomproj\build\cla
sses
run.client:
     [java] ------------>DONE !
     [java]  waiting server response ............
     [java] Current Hello World of response--------->0
     [java] ********    Server Response    **********
     [java]            Code : 0
     [java]            description : Success
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java]  waiting server response ............
     [java] Current Hello World of response--------->REQUEST_ERROR
     [java] ********    Server Response    **********
     [java]            Code : REQUEST_ERROR
     [java]            description : Invalid transactionKey format
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java]  waiting server response ............
     [java] Current Hello World of response--------->SECURITY_ERROR
     [java] ********    Server Response    **********
     [java]            Code : SECURITY_ERROR
     [java]            description : Wrong Credentials or Permission Denied on t
his API
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java]  waiting server response ............
     [java] Current Hello World of response--------->REQUEST_ERROR
     [java] ********    Server Response    **********
     [java]            Code : REQUEST_ERROR
     [java]            description : Invalid transactionKey
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java]  waiting server response ............
     [java] Current Hello World of response--------->APPLICATION_ERROR
     [java] ********    Server Response    **********
     [java]            Code : APPLICATION_ERROR
     [java]            description : Undetected error on Web Service
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java]  waiting server response ............
     [java] Current Hello World of response--------->REQUEST_ERROR
     [java] ********    Server Response    **********
     [java]            Code : REQUEST_ERROR
     [java]            description : Invalid transactionKey format
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java] Download confirm information --------->0
     [java] ********    Server Response    **********
     [java]            Code : 0
     [java]            description : Success
     [java] ******************************************
     [java]
     [java]
     [java]
     [java]
     [java]
BUILD SUCCESSFUL
Total time: 10 seconds
到此,一个简单的WebService程序就已经可以正常运行了!





















本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22374/showart_272751.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP