900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > webservice调用国内飞机航班时刻表 WEB 服务

webservice调用国内飞机航班时刻表 WEB 服务

时间:2021-09-09 05:20:37

相关推荐

webservice调用国内飞机航班时刻表 WEB 服务

昨天帮朋友写的一个调用国内航班时刻表的测试程序,折腾了我好一会的时间,打算把它分享出来,共大家参考,其中wsdl:/webservices/DomesticAirline.asmx?wsdl

这个是接口文档:/webservices/DomesticAirline.asmx

,这个wsdl是用来生产java类,但是生成以后调用不成功,没办法,只好用了httpclient自己解析的xml文档

以下是代码部分:

实体类AirLineInfo .java

package .finished;/*** @author Administrator**/public class AirLineInfo {//<Company>吉祥航空</Company>// <AirlineCode>HO1252</AirlineCode>// <StartDrome>北京首都国际机场</StartDrome>// <ArriveDrome>上海虹桥国际机场</ArriveDrome>// <StartTime>06:50</StartTime>// <ArriveTime>09:05</ArriveTime>// <Mode>320</Mode>// <AirlineStop>0</AirlineStop>// <Week>123456日</Week>// 返回数据:DataSet,Table(0)结构为 // Item(Company)航空公司、// Item(AirlineCode)航班号、// Item(StartDrome)出发机场、// Item(ArriveDrome)到达机场、// Item(StartTime)出发时间、// Item(ArriveTime)到达时间、// Item(Mode)机型、// Item(AirlineStop)经停// 、Item(Week)飞行周期(星期)private String company;private String airlineCode;private String startDrome;private String arriveDrome;private String startTime;private String arriveTime;private String mode;private String airlineStop;private String week;public String getCompany() {return company;}public void setCompany(String company) {pany = company;}public String getAirlineCode() {return airlineCode;}public void setAirlineCode(String airlineCode) {this.airlineCode = airlineCode;}public String getStartDrome() {return startDrome;}public void setStartDrome(String startDrome) {this.startDrome = startDrome;}public String getArriveDrome() {return arriveDrome;}public void setArriveDrome(String arriveDrome) {this.arriveDrome = arriveDrome;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getArriveTime() {return arriveTime;}public void setArriveTime(String arriveTime) {this.arriveTime = arriveTime;}public String getMode() {return mode;}public void setMode(String mode) {this.mode = mode;}public String getAirlineStop() {return airlineStop;}public void setAirlineStop(String airlineStop) {this.airlineStop = airlineStop;}public String getWeek() {return week;}public void setWeek(String week) {this.week = week;}@Overridepublic String toString() {return "AirLineInfo [航空公司=" + company + ", 航班号=" + airlineCode + ", 出发机场=" + startDrome+ ", 到达机场=" + arriveDrome + ", 出发时间=" + startTime + ", 到达时间=" + arriveTime + ", 机型="+ mode + ", 经停=" + airlineStop + ", 飞行周期(星期)=" + week + "]";} }

实体类CityInfo.java

package .finished;public class CityInfo {private String enCityName;// (enCityName)城市英文名称、private String cnCityName;// Item(cnCityName)城市中文名称private String abbreviation;// Item(Abbreviation)缩写public String getEnCityName() {return enCityName;}public void setEnCityName(String enCityName) {this.enCityName = enCityName;}public String getCnCityName() {return cnCityName;}public void setCnCityName(String cnCityName) {CityName = cnCityName;}public String getAbbreviation() {return abbreviation;}public void setAbbreviation(String abbreviation) {this.abbreviation = abbreviation;}@Overridepublic String toString() {return "CityInfo [城市英文名称=" + enCityName + ", 城市中文名称=" + cnCityName + ", 缩写=" + abbreviation+ "]";}}

调用getDomesticAirlinesTime方法

public static List<AirLineInfo> getDomesticAirlinesTimeString(String startCity ,String lastCity,String theDate,String userID) throws Exception{ String url = "/webservices/DomesticAirline.asmx/getDomesticAirlinesTime"; String host = ""; String param = "startCity="+URLEncoder.encode(startCity, "utf-8")+"&lastCity="+URLEncoder.encode(lastCity, "utf-8")+"&theDate="+theDate+"+&userID="+userID+""; HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(HttpProtocolParams.HTTP_CONTENT_CHARSET,"UTF-8"); HttpGet httpget = new HttpGet("http://"+host+url+"?"+param); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String responseBody = httpclient.execute(httpget, responseHandler); // System.out.println(responseBody); List<AirLineInfo> airList = getDomesticAirlinesTime(responseBody);httpclient.getConnectionManager().shutdown();return airList;} //解析xml字符串/*** * @param xmlString 需要解析的xml字符串,也即xml中的字符串* @return*/@SuppressWarnings("all")private static List<AirLineInfo> getDomesticAirlinesTime (String xmlString) {// 使用 SAXReader 解析 XML SAXReader saxReader = new SAXReader(); Document document = null; try { document = DocumentHelper.parseText(xmlString);} catch (DocumentException e) { e.printStackTrace(); } // 获取根节点 Element root = document.getRootElement(); // 打印节点名称 // System.out.println("<" + root.getName() + ">"); // 获取根节点下的子节点遍历 Iterator<?> iter = root.elementIterator("diffgram"); //创建一个list集合用来存储获取到的信息List<AirLineInfo> list=new ArrayList<AirLineInfo>();// 遍历diffgram节点 while (iter.hasNext()) { // 获取第一个diffgram节点 Element empEle = (Element) iter.next(); // System.out.println("<" + empEle.getName() + ">"); //获取Airlines节点Iterator elementIterator = empEle.elementIterator("Airlines");while (elementIterator.hasNext()) {Element object = (Element) elementIterator.next();Iterator airlinesTimes = object.elementIterator("AirlinesTime");//创建AirLineInfo对象AirLineInfo air=null;while (airlinesTimes.hasNext()) {air=new AirLineInfo();//循环遍历出了每一个AirlinesTime元素Element airlinesTime = (Element) airlinesTimes.next();//System.out.println(airlinesTime.getName());Iterator everyElement = airlinesTime.elementIterator();int count=1;while (everyElement.hasNext()) {Element every = (Element) everyElement.next();//Item(Company)航空公司、//Item(AirlineCode)航班号、//Item(StartDrome)出发机场、//Item(ArriveDrome)到达机场、//Item(StartTime)出发时间、//Item(ArriveTime)到达时间、//Item(Mode)机型、//Item(AirlineStop)经停//、Item(Week)飞行周期(星期)if(count==1){air.setCompany(every.getStringValue());}else if (count==2) {air.setAirlineCode(every.getStringValue());}else if (count==3) {air.setStartDrome(every.getStringValue());}else if (count==4) {air.setArriveDrome(every.getStringValue());}else if (count==5) {air.setStartTime(every.getStringValue());}else if (count==6) {air.setArriveTime(every.getStringValue());}else if (count==7) {air.setMode(every.getStringValue());}else if (count==8) {air.setAirlineStop(every.getStringValue());}else if (count==9) {air.setWeek(every.getStringValue());}//System.out.println(every.getStringValue());count++;}//把对象添加到集合中list.add(air);//保证count为 1~6count=1;}} }//循环遍历list集合// for (AirLineInfo airLineInfo : list) {// System.out.println(airLineInfo);// }return list;}

调用getDomesticCity 方法

@SuppressWarnings("all")public static List<CityInfo> getDomesticCityString () throws Exception{ String url = "/webservices/DomesticAirline.asmx/getDomesticCity"; String host = ""; @SuppressWarnings("deprecation")HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://"+host+url+""); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String responseBody = httpclient.execute(httpget, responseHandler);List<CityInfo> cityList = getDomesticCity(responseBody);// System.out.println(responseBody); httpclient.getConnectionManager().shutdown();return cityList;}@SuppressWarnings("all")private static List<CityInfo> getDomesticCity(String xmlString) {// 使用 SAXReader 解析 XML SAXReader saxReader = new SAXReader(); Document document = null; try { document = DocumentHelper.parseText(xmlString);} catch (DocumentException e) { e.printStackTrace(); } // 获取根节点 Element root = document.getRootElement(); // 打印节点名称 // System.out.println("<" + root.getName() + ">"); // 获取根节点下的子节点遍历 Iterator<?> iter = root.elementIterator("diffgram"); //创建一个list集合用来存储获取到的信息Map<String, AirLineInfo> map=new HashMap<String, AirLineInfo>();List<CityInfo> list=new ArrayList<CityInfo>();// 遍历diffgram节点 while (iter.hasNext()) { // 获取第一个diffgram节点 Element empEle = (Element) iter.next(); // System.out.println("<" + empEle.getName() + ">"); //获取Airlines节点Iterator elementIterator = empEle.elementIterator("Airline1");while (elementIterator.hasNext()) {Element object = (Element) elementIterator.next();Iterator airlinesTimes = object.elementIterator("Address");//创建CityInfo对象CityInfo city=null;while (airlinesTimes.hasNext()) {city=new CityInfo();//循环遍历出了每一个AirlinesTime元素Element airlinesTime = (Element) airlinesTimes.next();// System.out.println(airlinesTime.getName());Iterator everyElement = airlinesTime.elementIterator();int count=1;while (everyElement.hasNext()) {Element every = (Element) everyElement.next();if(count==1){city.setEnCityName(every.getStringValue());}else if (count==2) {city.setCnCityName(every.getStringValue());}else if (count==3) {city.setAbbreviation(every.getStringValue());}//System.out.println(every.getStringValue());count++;}//把对象添加到集合中list.add(city);//保证count为 1~3count=1;}} }return list;}

测试类TestAir.java:

List<CityInfo> cityList = DomesticAirline.getDomesticCityString();for (CityInfo cityInfo : cityList) {System.out.println(cityInfo);}List<AirLineInfo> list = DomesticAirline.getDomesticAirlinesTimeString("北京", "太原", "-10-2", "");for (AirLineInfo airLineInfo : list) {System.out.println(airLineInfo);}

至此调用完成,上一个成功的截图

这是eclipse项目以及jar包下载地址:webservice调用国内飞机航班时刻表下载链接

ok,完活!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。