JAVA处理含有DataSet的web services

java

本篇文章将讲述如何通过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

以上是 JAVA处理含有DataSet的web services 的全部内容, 来源链接: utcz.com/z/392144.html

回到顶部