熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JAVA處理含有DataSet的web services

2013-11-23 19:25:28  來源: Java核心技術 

  本篇文章將講述如何通過axis取發布的Web services並處理返回含有DataSet的處理結果展現在頁面上

  涉及到的知識有

  AXIS

  SAXBuilder

  xml

  步驟如下

  生成client stub文件

  必備條件axis開源包JDK

  A)比如AXIS包放在你的C盤則需要在環境變量當中設定的東東有

  AXIS_HOME=C:\AXIS

  AXIS_CLASSPATH=;%AXIS_HOME%\lib\axisjar;%AXIS_HOME%\lib\axisantjar;%AXIS_HOME%\lib\commonsdiscoveryjar;%AXIS_HOME%\lib\commonsloggingjar;%AXIS_HOME%\lib\jaxrpcjar;%AXIS_HOME%\lib\saajjar;%AXIS_HOME%\lib\wsdljjar;%AXIS_HOME%\lib\logjjar;%AXIS_HOME%\lib\activationjar;%AXIS_HOME%\lib\mailjar

  然後加入到PATH當中;% AXIS_CLASSPATH%   (加入就可以了)

  注意很多人因為以上的配置不對導致對AXIS學習的信心下降其實仔細一點就會發現在CLASSPATH當中找一找有沒有版本區別也就是每一個JAR包是不是真的存在就可以了(哈哈我曾為之付出了兩天的時間娞!)

  B)進入DOS模式轉到D盤執行如下代碼

  java orgapacheaxiswsdlWSDLJava p <名稱最好是包名> 看到了吧發布為asmx的文件後面加入?wsdl就可以解決了

  然後就會在這個<名稱最好是包名>下就會有一堆的JAVA文件一般的話會有

  xxxxjava

  xxxxLocatorjava

  xxxxSoapjava

  xxxxSoapStubjava

  其次還有以下劃線_xxxx????java的文件都是序列化的對象也就是返回的結果對應元素可以暫時不理它下面就以作者生成的示例做一個引用webservice的操作作者得到的文件如下:

  SearchFlightInfojava

  SearchFlightInfoLocatorjava

  SearchFlightInfoSoapjava

  SearchFlightInfoSoapStubjava

  

  _GetFlightInfoResponse_GetFlightInfoResultjava

  _GetstrFlightInfojava

  _GetstrFlightInfoResponsejava

  C)引用方法

  基本思想是從得到web services後取得他的主體信息(返回的數據信息)然後生成XML文件然後再把XML文件轉換成一個JAVA序列化對象就可以了

  如下是序列化對象的代碼

  java 代碼

  try {

  /**

  * 取得前台的參數 航班日期 航班號

  */

  String planDate = requestgetParameter(day);

  String flyNo = requestgetParameter(hanbanno);

  /**

  * 按照最新版本制作最新位置在

  */

  SearchFlightInfo service = new SearchFlightInfoLocator();

  SearchFlightInfoSoap client = servicegetSearchFlightInfoSoap();

  _GetFlightInfoResponse_GetFlightInfoResult FOCInfo=clientgetFlightInfo(planDate flyNo);

  String ErrorInfo = clientgetstrFlightInfo(planDate flyNo);//錯誤警告信息

  MessageElement[] FOCElement = FOCInfoget_any();//取得xml信息

  List FOCElementHead = FOCElement[]getChildren();//消息頭DataSet對象

  List FOCElementBody = FOCElement[]getChildren();//消息體信息DataSet對象

  if (FOCElementBodysize() <= ){

  //無返回記錄則無輸出

  return mappingfindForward(NoRecord);

  }

  String nn = FOCElementBodyget()toString();//消息體的字符串形式

  String path = requestgetRealPath();

  CommonToolssaveXMLString(nnpath+\\FOC\\heweiyaxml);//保存為XML形式其中FOC目錄做為固定目錄

  /**

  * 使用DOMJ來解析這個序列化的對象

  */

  //String path = requestgetRealPath();

  Vector OutFoc = CommonToolsLoadXML(path + \\FOC\\heweiyaxml);

  requestsetAttribute(OutFoc OutFoc);

  if (requestgetParameter(as) != null) {

  return mappingfindForward(Foc);

  }

  return mappingfindForward(Foc);

  } catch (Exception e) {

  /**

  * 服務有異常或者服務沒有啟動!

  */

  requestsetAttribute(UserMsg PublicFocError);

  return mappingfindForward(Fail);

  }

  如下是解析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 = sbbuild(fi);

  Element root = docgetRootElement(); // 得到根元素

  List focs = rootgetChildren(); // 得到根元素所有子元素的集合

  Element foc = null;

  FocBean xml = null;

  /**

  * 從開始因為為錯誤警告信息

  */

  for (int i = ; i < focssize(); i++) {

  xml = new FocBean();

  foc = (Element) focsget(i); // 得到第一本書元素

  /*               xmlsetAta(focgetChild(ATA)getText());

  xmlsetAtd(focgetChild(ATD)getText());

  xmlsetEta(focgetChild(ETA)getText());

  xmlsetEtd(focgetChild(ETD)getText());

  xmlsetFltid(focgetChild(FLTID)getText());

  xmlsetSta(focgetChild(STA)getText());

  xmlsetStd(focgetChild(STD)getText());

  xmlsetTdwn(focgetChild(TDWN)getText());

  xmlsetToff(focgetChild(TOFF)getText());*/

  /**

  * 如下是最新版本的取得實體對象的方法

  * modify by heweiya

  */

  xmlsetAta(focgetChild(ATA)getText());

  xmlsetAtd(focgetChild(ATD)getText());

  xmlsetEta(focgetChild(ETA)getText());

  xmlsetEtd(focgetChild(ETD)getText());

  xmlsetFltid(focgetChild(FLTID)getText());

  xmlsetSta(focgetChild(STA)getText());

  xmlsetStd(focgetChild(STD)getText());

  xmlsetTdwn(focgetChild(TDWN)getText());

  xmlsetToff(focgetChild(TOFF)getText());

  xmlsetAcown(focgetChild(ACOWN)getText());

  xmlsetActyp(focgetChild(ACTYP)getText());

  xmlsetArrstn(focgetChild(ARRSTN)getText());

  xmlsetDatop(focgetChild(DATOP)getText());

  xmlsetDepstn(focgetChild(DEPSTN)getText());

  xmlsetPlnid(focgetChild(Plnid)getText());

  xmlVectoradd(xml);

  }

  } catch (Exception e) {

  Systemerrprintln(e + error);

  } finally {

  try {

  ficlose();

  } catch (Exception e) {

  eprintStackTrace();

  }

  }

  return xmlVector;

  }

  還有一個代碼如下

  java 代碼

  // 把String 保存為文件

  public static void saveXMLString(String XMLString String fileName)

  throws IOException {

  File file = new File(fileName);

  if (fileexists()) {

  filedelete();

  }

  filecreateNewFile();

  if (filecanWrite()) {

  FileWriter fileOut = new FileWriter(file);

  fileOutwrite(XMLString);

  fileOutclose();

  }

  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26845.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.