`

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序列化对象就可以了。
        如下是序列化对象的代码。
                     

java 代码 
  1. try {   
  2.             /**  
  3.              * 取得前台的参数 1、航班日期 2、航班号  
  4.              */  
  5.             String planDate = request.getParameter("day");   
  6.             String flyNo = request.getParameter("hanbanno");   
  7.             /**  
  8.              * 按照最新版本制作,最新位置在:http://10.2.10.62/OPCFltWS/SearchFlightInfo.asmx  
  9.              */  
  10.             SearchFlightInfo service = new SearchFlightInfoLocator();   
  11.             SearchFlightInfoSoap client = service.getSearchFlightInfoSoap();   
  12.             _GetFlightInfoResponse_GetFlightInfoResult FOCInfo=client.getFlightInfo(planDate, flyNo);   
  13.             String ErrorInfo = client.getstrFlightInfo(planDate, flyNo);//错误警告信息
  14.             MessageElement[] FOCElement = FOCInfo.get_any();//取得xml信息   
  15.             List FOCElementHead = FOCElement[0].getChildren();//消息头,DataSet对象   
  16.             List FOCElementBody = FOCElement[1].getChildren();//消息体信息,DataSet对象 
  17.             if (FOCElementBody.size() <= 0){   
  18.                 //无返回记录,则无输出   
  19.                 return mapping.findForward("NoRecord");    
  20.             }   
  21.             String nn = FOCElementBody.get(0).toString();//消息体的字符串形式    
  22.             String path = request.getRealPath("");    
  23.             CommonTools.saveXMLString(nn,path+"\\FOC\\heweiya1.xml");//保存为XML形式,其中FOC目录做为固定目录   
  24.             /**  
  25.                  * 使用DOM4J来解析这个序列化的对象  
  26.                  */  
  27.             //String path = request.getRealPath("");   
  28.             Vector OutFoc = CommonTools.LoadXML(path + "\\FOC\\heweiya1.xml");   
  29.             request.setAttribute("OutFoc", OutFoc);   
  30.             if (request.getParameter("as") != null) {   
  31.                 return mapping.findForward("Foc1");   
  32.             }   
  33.             return mapping.findForward("Foc");   
  34.         } catch (Exception e) {   
  35.             /**  
  36.              * 服务有异常,或者服务没有启动!  
  37.              */  
  38.             request.setAttribute("UserMsg""Public.FocError");   
  39.             return mapping.findForward("Fail");   
  40.         }  

  

  1. package com.travelsky.kams.front.foc.webservices;   
  2.   
  3. public class FocBean implements java.io.Serializable{   
  4.   
  5.     private String acown;//航班1   
  6.     private String fltid;//航班2   
  7.     private String datop;//查询日期   
  8.     private String std;   
  9.     private String sta;   
  10.     private String etd;//   
  11.     private String eta;//   
  12.     private String atd;   
  13.     private String toff;//滑出时间   
  14.     private String tdwn;//滑到位时间   
  15.     private String ata;//飞行状态   
  16.     private String actyp;//机型   
  17.     private String depstn;//起始机场   
  18.     private String arrstn;//到达机场   
  19.     private String plnid;//机号   
  20.     /** default constructor */  
  21.     public FocBean() {   
  22.     }   
  23.       
  24.     public String getAcown() {   
  25.         return this.acown;   
  26.     }   
  27.        
  28.     public void setAcown(String acown) {   
  29.         this.acown = acown;   
  30.     }   
  31.     public String getDatop() {   
  32.         return this.datop;   
  33.     }   
  34.        
  35.     public void setDatop(String datop) {   
  36.         this.datop = datop;   
  37.     }      
  38.        
  39.        
  40.     public String getFltid() {   
  41.         return this.fltid;   
  42.     }   
  43.        
  44.     public void setFltid(String fltid) {   
  45.         this.fltid = fltid;   
  46.     }   
  47.     public String getStd() {   
  48.         return this.std;   
  49.     }   
  50.        
  51.     public void setStd(String std) {   
  52.         this.std = std;   
  53.     }   
  54.     public String getSta() {   
  55.         return this.sta;   
  56.     }   
  57.        
  58.     public void setSta(String sta) {   
  59.         this.sta = sta;   
  60.     }   
  61.     public String getEtd() {   
  62.         return this.etd;   
  63.     }   
  64.        
  65.     public void setEtd(String etd) {   
  66.         this.etd = etd;   
  67.     }   
  68.     public String getEta() {   
  69.         return this.eta;   
  70.     }   
  71.        
  72.     public void setEta(String eta) {   
  73.         this.eta = eta;   
  74.     }   
  75.     public String getAtd() {   
  76.         return this.atd;   
  77.     }   
  78.        
  79.     public void setAtd(String atd) {   
  80.         this.atd = atd;   
  81.     }   
  82.     public String getToff() {   
  83.         return this.toff;   
  84.     }   
  85.        
  86.     public void setToff(String toff) {   
  87.         this.toff = toff;   
  88.     }   
  89.     public String getTdwn() {   
  90.         return this.tdwn;   
  91.     }   
  92.        
  93.     public void setTdwn(String tdwn) {   
  94.         this.tdwn = tdwn;   
  95.     }   
  96.     public String getAta() {   
  97.         return this.ata;   
  98.     }   
  99.        
  100.     public void setAta(String ata) {   
  101.         this.ata = ata;   
  102.     }   
  103.     public String getActyp() {   
  104.         return this.actyp;   
  105.     }   
  106.        
  107.     public void setActyp(String actyp) {   
  108.         this.actyp = actyp;   
  109.     }   
  110.     public String getDepstn() {   
  111.         return this.depstn;   
  112.     }   
  113.        
  114.     public void setDepstn(String depstn) {   
  115.         this.depstn = depstn;   
  116.     }   
  117.     public String getArrstn() {   
  118.         return this.arrstn;   
  119.     }   
  120.        
  121.     public void setArrstn(String arrstn) {   
  122.         this.arrstn = arrstn;   
  123.     }   
  124.     public String getPlnid() {   
  125.         return this.plnid;   
  126.     }   
  127.        
  128.     public void setPlnid(String plnid) {   
  129.         this.plnid = plnid;   
  130.     }   
  131.   
  132. }   

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

  1. /**  
  2.      * 读取XML文件所有信息  
  3.      */  
  4.     public static Vector LoadXML(String path) throws Exception {   
  5.         Vector xmlVector = null;   
  6.         FileInputStream fi = null;   
  7.         try {   
  8.             fi = new FileInputStream(path);   
  9.             xmlVector = new Vector();   
  10.             SAXBuilder sb = new SAXBuilder();   
  11.             Document doc = sb.build(fi);   
  12.             Element root = doc.getRootElement(); // 得到根元素   
  13.             List focs = root.getChildren(); // 得到根元素所有子元素的集合   
  14.             Element foc = null;   
  15.             FocBean xml = null;   
  16.             /**  
  17.              * 从1开始,因为0为错误警告信息  
  18.              */  
  19.             for (int i = 1; i < focs.size(); i++) {   
  20.                 xml = new FocBean();   
  21.                 foc = (Element) focs.get(i); // 得到第一本书元素   
  22. /*              xml.setAta(foc.getChild("ATA").getText());  
  23.                 xml.setAtd(foc.getChild("ATD").getText());  
  24.                 xml.setEta(foc.getChild("ETA").getText());  
  25.                 xml.setEtd(foc.getChild("ETD").getText());  
  26.                 xml.setFltid(foc.getChild("FLTID").getText());  
  27.                 xml.setSta(foc.getChild("STA").getText());  
  28.                 xml.setStd(foc.getChild("STD").getText());  
  29.                 xml.setTdwn(foc.getChild("TDWN").getText());  
  30.                 xml.setToff(foc.getChild("TOFF").getText());*/  
  31.                 /**  
  32.                  * 如下是最新版本的取得实体对象的方法  
  33.                  * modify by heweiya 2006-12-14  
  34.                  */  
  35.                 xml.setAta(foc.getChild("ATA").getText());   
  36.                 xml.setAtd(foc.getChild("ATD").getText());   
  37.                 xml.setEta(foc.getChild("ETA").getText());   
  38.                 xml.setEtd(foc.getChild("ETD").getText());   
  39.                 xml.setFltid(foc.getChild("FLTID").getText());   
  40.                 xml.setSta(foc.getChild("STA").getText());   
  41.                 xml.setStd(foc.getChild("STD").getText());   
  42.                 xml.setTdwn(foc.getChild("TDWN").getText());   
  43.                 xml.setToff(foc.getChild("TOFF").getText());   
  44.                 xml.setAcown(foc.getChild("ACOWN").getText());   
  45.                 xml.setActyp(foc.getChild("ACTYP").getText());   
  46.                 xml.setArrstn(foc.getChild("ARRSTN").getText());   
  47.                 xml.setDatop(foc.getChild("DATOP").getText());   
  48.                 xml.setDepstn(foc.getChild("DEPSTN").getText());   
  49.                 xml.setPlnid(foc.getChild("Plnid").getText());   
  50.                    
  51.                 xmlVector.add(xml);   
  52.             }   
  53.         } catch (Exception e) {   
  54.             System.err.println(e + "error");   
  55.         } finally {   
  56.             try {   
  57.                 fi.close();   
  58.             } catch (Exception e) {   
  59.                 e.printStackTrace();   
  60.             }   
  61.         }   
  62.         return xmlVector;   
  63.     }  

          还有一个代码如下:
           

java 代码
  1. // 把String 保存为文件   
  2.     public static void saveXMLString(String XMLString, String fileName)   
  3.             throws IOException {   
  4.         File file = new File(fileName);   
  5.         if (file.exists()) {   
  6.             file.delete();   
  7.         }   
  8.         file.createNewFile();   
  9.         if (file.canWrite()) {   
  10.             FileWriter fileOut = new FileWriter(file);   
  11.             fileOut.write(XMLString);   
  12.             fileOut.close();   
  13.         }   
  14.     }  

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

      另外个人意见:我在外包公司工作,很累。几乎没有学习新东西的时间,希望有远大志向的人或者想追赶技术潮流的人不要应聘这类公司。 

分享到:
评论
4 楼 kiss.988 2007-03-11  
好方法,值得我去认真思考一番。
3 楼 ray_linn 2006-12-30  
娞 这个字强~ 看了半天不知道怎么打出来的
2 楼 liusu 2006-12-30  
我按照你的方法成功实现了调用,万分感谢!
1 楼 xly_971223 2006-12-14  
国内公司都差不多,非外包公司也不一定能学到东西

相关推荐

    java处理.net webservice返回的对象

    5. wsdl4j-1.5.1.jar - 用于解析和处理WSDL(Web Services Description Language)文件。 接下来,我们看一个简单的示例,展示如何调用.NET WebService的`GetSafeMode`方法并传递参数及接收返回值: ```java @...

    AXIS 天气预报 QQ在线查询

    `src`目录则存放源代码,而`WebServices`可能是专门存放Web服务相关代码的目录。 总的来说,"AXIS 天气预报 QQ在线查询"项目涉及了通过AXIS调用Web服务,使用WSDL2JAVA工具生成客户端代码,以及处理特定类型(如...

    JAVA.net面试不求人

    从给定的文件信息中,...以上知识点不仅覆盖了JAVA .net面试中可能遇到的基本概念和技术细节,也涉及了高级主题如虚拟机、XML配置以及Web服务的深度理解,对于准备面试的候选人来说,全面掌握这些知识点将大有裨益。

    免费天气预报 WebService 接口

    - **Disco**:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?disco - **WSDL**:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl ##### 3.1 使用限制 为了平衡资源使用和服务...

    C#.net web开发者指南

    - **IIS配置**:学习如何配置Internet Information Services (IIS) 服务器以托管C# Web应用。 - **持续集成和持续部署(CI/CD)**:使用Jenkins、Azure DevOps或其他工具实现自动化构建和部署。 9. **最新技术趋势*...

    PetShop4.0框架详解

    3. XML Web Services:PetShop4.0还涉及XML Web Services的使用,允许不同平台的应用程序之间共享数据和服务。通过Web服务,PetShop4.0可以与其他系统集成,实现更复杂的功能。 四、PetShop4.0的学习价值 1. 开发...

    微软的宠物商店源代码

    ADO.NET通过DataSet、DataTable、DataAdapter等对象提供了一种与数据库交互的方式,允许开发者进行数据查询、更新和事务处理。Pet Shop项目展示了如何利用ADO.NET与SQL Server或其他支持的数据库系统进行通信,执行...

    ASP.net 2.0的web2.0应用-blog、Tags、Rss、Xml和ajax mail

    在ASP.NET 2.0中,可以使用System.Web.Services命名空间下的 SyndicationService 类创建RSS feed,包括标题、描述、链接等信息。同时,提供RSS订阅按钮,用户点击后可以订阅博客文章或新闻。 **XML** XML...

    ASP.NET 基础教程—Visual Basic.NET 案例版

    ADO.NET提供了一套接口和类库,使得开发者可以方便地连接到各种数据库,执行SQL语句,以及填充DataSet或DataReader对象来处理查询结果。 此外,ASP.NET还包含了状态管理机制,如View State和Session,用于在多个...

    ASP.NET课件,ASP.NET电子书,ASP.NET2.0

    IIS(Internet Information Services)是Windows操作系统中的一个Web服务器组件,开发者需要学会如何安装和配置IIS来运行和测试ASP.NET应用程序。Visual Studio 2005(VS2005)是一个强大的开发环境,可以用来创建、...

    面试题(.NET)答案

    5. .NET Framework 是一个全面的开发平台,包括 Common Language Runtime (CLR)、Base Class Library (BCL)、各种编程语言(如VB.NET、C#、C++ CLI等)、XML Web Services、Web Forms、Windows Forms、数据处理和XML...

    c#习题册及答案详细描述

    4. IIS(Internet Information Services)是微软提供的Web服务器,支持多种Web应用和服务。 5. Session对象用于在用户会话期间存储和检索特定用户的变量,提供跨页面的数据持久性。 6. web.config文件用于配置ASP...

    Flex4 SQL2005

    - **GDS (Granite Data Services)**:基于Java平台,支持AMF3。 - **WebORB**:支持.NET, Java, PHP, Ruby等多种平台,同时支持AMF0和AMF3。 - **FluorineFX**:本案例选用的.NET平台的开源项目,支持AMF0, AMF3, ...

    linux

    其中,CGI是最早的Web服务器扩展接口,ISAPI是专为Internet Information Services (IIS) 设计的,PHP是一种开源的脚本语言,常用于Web开发,而JSP则是Java平台上的服务器端脚本技术。 【数据库技术】如Oracle、SQL ...

    Professional C# 3rd Edition

    Windows Services 24 The Role of C# in the .NET Enterprise Architecture 24 Summary 26 Chapter 2: C# Basics 29 Before We Start 30 Our First C# Program 30 The Code 30 Compiling and Running the Program 31...

    C#面试问题大全推荐看看

    在.NET Framework中,Web Service通过SOAP协议和WSDL(Web Services Description Language)进行通信,实现了跨平台的数据交换。 3. **C#、Java和C++的比较** C#、Java和C++都是面向对象的编程语言,但各有特点。...

    Python库 | cdk_databrew_cicd-0.1.37-py3-none-any.whl

    CDK是由Amazon Web Services(AWS)开发的一组软件开发工具,用于定义云应用程序的基础设施代码。CDK允许开发者使用他们熟悉的编程语言(如Python、Java、TypeScript等)来构建、部署和管理AWS资源。通过CDK,开发者...

    ASP.NET-某企业信息管理系统的设计与实现.zip

    10. **部署与发布**:完成开发后,需要将应用程序部署到IIS(Internet Information Services)或其他Web服务器上。理解部署过程,包括配置文件设置、数据库连接字符串、文件权限等,是确保系统正常运行的重要步骤。 ...

Global site tag (gtag.js) - Google Analytics