zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    缺省参数的注意事项
    可变和不可变类型
    Python之旅
    BBS项目 个人界面分类,文章,模板的使用详解
    Django 模板
    BBS项目 部分主界面and个人博客界面代码详解
    BBS项目 注册界面and部分首页代码详解
    BBS项目 备忘时时更新
    BBS项目 登录界面代码详解
    BBS项目 基本表关系
  • 原文地址:https://www.cnblogs.com/gzggyy/p/3129177.html
Copyright © 2011-2022 走看看