JAVA处理含有DataSet的web services

本篇文章将讲述如何通过axis取得.net发布的Web services,并处理返回含有DataSet的处理结果,展现在页面上。
  涉及到的知识有:
  AXIS
        SAXBuilder
        xml

        步骤如下:
  1)、生成client stub文件。
     必备条件axis开源包。JDK
    A)、比如AXIS包放在你的C盘,则需要在环境变量当中设定的东东有:
                           AXIS_HOME=C:\AXIS
                           AXIS_CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;%AXIS_HOME%\lib\activation.jar;%AXIS_HOME%\lib\mail.jar
                           然后加入到PATH当中:.;% AXIS_CLASSPATH%   (加入就可以了)
                          注意:很多人因为以上的配置不对,导致对AXIS学习的信心下降,其实,仔细一点就会发现在CLASSPATH当中找一找有没有版本区别。也就是每一个JAR包是不是真的存在就可以了。(哈哈,我曾为之付出了两天的时间娞!)
                 B)、进入DOS模式,转到D盘,执行如下代码:
      java org.apache.axis.wsdl.WSDL2Java -p <名称,最好是包名> http://10.2.10.80/FocService/FocService.asmx?wsdl,看到了吧。对.net发布为asmx的文件后面加入?wsdl就可以解决了。
      然后就会在这个<名称,最好是包名>下就会有一堆的JAVA文件,一般的话会有:
                       xxxx.java
                       xxxxLocator.java
                       xxxxSoap.java
                      xxxxSoapStub.java
                      其次还有以下划线_xxxx????.java的文件都是序列化的对象,也就是返回的结果对应元素。可以暂时不理它。下面就以作者生成的示例做一个引用webservice的操作。作者得到的文件如下:
                       SearchFlightInfo.java
                       SearchFlightInfoLocator.java
                       SearchFlightInfoSoap.java
                      SearchFlightInfoSoapStub.java
                       -----------------------------------------------------------------------
                       _GetFlightInfoResponse_GetFlightInfoResult.java
                      _GetstrFlightInfo.java
                     _GetstrFlightInfoResponse.java
                    C)、引用方法:
    

                               基本思想是从得到web services后取得他的主体信息(返回的数据信息),然后生成XML文件,然后再把XML文件转换成一个JAVA序列化对象就可以了。
        如下是序列化对象的代码。

try {   
            /**  
             * 取得前台的参数 1、航班日期 2、航班号  
             */  
            String planDate = request.getParameter("day");   
            String flyNo = request.getParameter("hanbanno");   
            /**  
             * 按照最新版本制作,最新位置在:http://10.2.10.62/OPCFltWS/SearchFlightInfo.asmx  
             */  
            SearchFlightInfo service = new SearchFlightInfoLocator();   
            SearchFlightInfoSoap client = service.getSearchFlightInfoSoap();   
            _GetFlightInfoResponse_GetFlightInfoResult FOCInfo=client.getFlightInfo(planDate, flyNo);   
            String ErrorInfo = client.getstrFlightInfo(planDate, flyNo);//错误警告信息
            MessageElement[] FOCElement = FOCInfo.get_any();//取得xml信息   
            List FOCElementHead = FOCElement[0].getChildren();//消息头,DataSet对象   
            List FOCElementBody = FOCElement[1].getChildren();//消息体信息,DataSet对象 
            if (FOCElementBody.size() <= 0){   
                //无返回记录,则无输出   
                return mapping.findForward("NoRecord");    
            }   
            String nn = FOCElementBody.get(0).toString();//消息体的字符串形式    
            String path = request.getRealPath("");    
            CommonTools.saveXMLString(nn,path+"\\FOC\\heweiya1.xml");//保存为XML形式,其中FOC目录做为固定目录   
            /**  
                 * 使用DOM4J来解析这个序列化的对象  
                 */  
            //String path = request.getRealPath("");   
            Vector OutFoc = CommonTools.LoadXML(path + "\\FOC\\heweiya1.xml");   
            request.setAttribute("OutFoc", OutFoc);   
            if (request.getParameter("as") != null) {   
                return mapping.findForward("Foc1");   
            }   
            return mapping.findForward("Foc");   
        } catch (Exception e) {   
            /**  
             * 服务有异常,或者服务没有启动!  
             */  
            request.setAttribute("UserMsg", "Public.FocError");   
            return mapping.findForward("Fail");   
        }  
package com.travelsky.kams.front.foc.webservices;   
  
public class FocBean implements java.io.Serializable{   
  
    private String acown;//航班1   
    private String fltid;//航班2   
    private String datop;//查询日期   
    private String std;   
    private String sta;   
    private String etd;//   
    private String eta;//   
    private String atd;   
    private String toff;//滑出时间   
    private String tdwn;//滑到位时间   
    private String ata;//飞行状态   
    private String actyp;//机型   
    private String depstn;//起始机场   
    private String arrstn;//到达机场   
    private String plnid;//机号   
    /** default constructor */  
    public FocBean() {   
    }   
      
    public String getAcown() {   
        return this.acown;   
    }   
       
    public void setAcown(String acown) {   
        this.acown = acown;   
    }   
    public String getDatop() {   
        return this.datop;   
    }   
       
    public void setDatop(String datop) {   
        this.datop = datop;   
    }      
       
       
    public String getFltid() {   
        return this.fltid;   
    }   
       
    public void setFltid(String fltid) {   
        this.fltid = fltid;   
    }   
    public String getStd() {   
        return this.std;   
    }   
       
    public void setStd(String std) {   
        this.std = std;   
    }   
    public String getSta() {   
        return this.sta;   
    }   
       
    public void setSta(String sta) {   
        this.sta = sta;   
    }   
    public String getEtd() {   
        return this.etd;   
    }   
       
    public void setEtd(String etd) {   
        this.etd = etd;   
    }   
    public String getEta() {   
        return this.eta;   
    }   
       
    public void setEta(String eta) {   
        this.eta = eta;   
    }   
    public String getAtd() {   
        return this.atd;   
    }   
       
    public void setAtd(String atd) {   
        this.atd = atd;   
    }   
    public String getToff() {   
        return this.toff;   
    }   
       
    public void setToff(String toff) {   
        this.toff = toff;   
    }   
    public String getTdwn() {   
        return this.tdwn;   
    }   
       
    public void setTdwn(String tdwn) {   
        this.tdwn = tdwn;   
    }   
    public String getAta() {   
        return this.ata;   
    }   
       
    public void setAta(String ata) {   
        this.ata = ata;   
    }   
    public String getActyp() {   
        return this.actyp;   
    }   
       
    public void setActyp(String actyp) {   
        this.actyp = actyp;   
    }   
    public String getDepstn() {   
        return this.depstn;   
    }   
       
    public void setDepstn(String depstn) {   
        this.depstn = depstn;   
    }   
    public String getArrstn() {   
        return this.arrstn;   
    }   
       
    public void setArrstn(String arrstn) {   
        this.arrstn = arrstn;   
    }   
    public String getPlnid() {   
        return this.plnid;   
    }   
       
    public void setPlnid(String plnid) {   
        this.plnid = plnid;   
    }   
  
}   

 如下是解析XML文件变换成一个序列化的对象的JAVA代码:(其中Vecto就相关于安全的LIST了)

/**  
     * 读取XML文件所有信息  
     */  
    public static Vector LoadXML(String path) throws Exception {   
        Vector xmlVector = null;   
        FileInputStream fi = null;   
        try {   
            fi = new FileInputStream(path);   
            xmlVector = new Vector();   
            SAXBuilder sb = new SAXBuilder();   
            Document doc = sb.build(fi);   
            Element root = doc.getRootElement(); // 得到根元素   
            List focs = root.getChildren(); // 得到根元素所有子元素的集合   
            Element foc = null;   
            FocBean xml = null;   
            /**  
             * 从1开始,因为0为错误警告信息  
             */  
            for (int i = 1; i < focs.size(); i++) {   
                xml = new FocBean();   
                foc = (Element) focs.get(i); // 得到第一本书元素   
/*              xml.setAta(foc.getChild("ATA").getText());  
                xml.setAtd(foc.getChild("ATD").getText());  
                xml.setEta(foc.getChild("ETA").getText());  
                xml.setEtd(foc.getChild("ETD").getText());  
                xml.setFltid(foc.getChild("FLTID").getText());  
                xml.setSta(foc.getChild("STA").getText());  
                xml.setStd(foc.getChild("STD").getText());  
                xml.setTdwn(foc.getChild("TDWN").getText());  
                xml.setToff(foc.getChild("TOFF").getText());*/  
                /**  
                 * 如下是最新版本的取得实体对象的方法  
                 * modify by heweiya 2006-12-14  
                 */  
                xml.setAta(foc.getChild("ATA").getText());   
                xml.setAtd(foc.getChild("ATD").getText());   
                xml.setEta(foc.getChild("ETA").getText());   
                xml.setEtd(foc.getChild("ETD").getText());   
                xml.setFltid(foc.getChild("FLTID").getText());   
                xml.setSta(foc.getChild("STA").getText());   
                xml.setStd(foc.getChild("STD").getText());   
                xml.setTdwn(foc.getChild("TDWN").getText());   
                xml.setToff(foc.getChild("TOFF").getText());   
                xml.setAcown(foc.getChild("ACOWN").getText());   
                xml.setActyp(foc.getChild("ACTYP").getText());   
                xml.setArrstn(foc.getChild("ARRSTN").getText());   
                xml.setDatop(foc.getChild("DATOP").getText());   
                xml.setDepstn(foc.getChild("DEPSTN").getText());   
                xml.setPlnid(foc.getChild("Plnid").getText());   
                   
                xmlVector.add(xml);   
            }   
        } catch (Exception e) {   
            System.err.println(e + "error");   
        } finally {   
            try {   
                fi.close();   
            } catch (Exception e) {   
                e.printStackTrace();   
            }   
        }   
        return xmlVector;   
    }  

还有一个代码如下:

// 把String 保存为文件   
    public static void saveXMLString(String XMLString, String fileName)   
            throws IOException {   
        File file = new File(fileName);   
        if (file.exists()) {   
            file.delete();   
        }   
        file.createNewFile();   
        if (file.canWrite()) {   
            FileWriter fileOut = new FileWriter(file);   
            fileOut.write(XMLString);   
            fileOut.close();   
        }   
    }  

 以上所述是作者调试通过。使用STRUTS做为前台,然后输出就可以了。本文章只讨论技术问题,示例当中的代码
只做为研究学习使用,并无它意。

 

转:http://www.iteye.com/topic/39025

posted @ 2013-06-09 14:45  还是你最好  阅读(5472)  评论(2编辑  收藏  举报