前段日子看到了一个提供WEB服务的网站-www.webxml.com.cn.它提供各种适用的Web服务。如天气预报、火车时刻表。
于是就通过它提供的接口,实验了一下,看看它提供的那些接口有什么效果。但是因为是免费用户,所以每次访问的次数有限制,所以只是测试一下。
但是你需要从WSDL文档中生成客户端支持代码,可以使用axis的wsdl2java:
%AXIS2_HOME%\bin\wsdl2java -uri http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl -p client -s -o stub
其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。
在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个SimpleServiceStub.java文件,该文件复杂调用WebService,
可以在程序中直接使用这个类。
我用了好几个服务,火车,天气,城市代码等。
先贴我的pojo,pojo需要和它提供的入口的属性一致,代码如下:
Train.java
- package com.jushi.pojo;
- public class Train {
- private String trainStation;
- private String arriveTime;
- private String startTime;
- private String km;
- private String firstStation;
- private String lastStation;
- private String trainCode;
- private String startStation;
- private String arriveStation;
- private String useDate;
- public String getTrainStation() {
- return trainStation;
- }
- public void setTrainStation(String trainStation) {
- this.trainStation = trainStation;
- }
- public String getArriveTime() {
- return arriveTime;
- }
- public void setArriveTime(String arriveTime) {
- this.arriveTime = arriveTime;
- }
- public String getStartTime() {
- return startTime;
- }
- public void setStartTime(String startTime) {
- this.startTime = startTime;
- }
- public String getKm() {
- return km;
- }
- public void setKm(String km) {
- this.km = km;
- }
- public String getFirstStation() {
- return firstStation;
- }
- public void setFirstStation(String firstStation) {
- this.firstStation = firstStation;
- }
- public String getLastStation() {
- return lastStation;
- }
- public void setLastStation(String lastStation) {
- this.lastStation = lastStation;
- }
- public String getTrainCode() {
- return trainCode;
- }
- public void setTrainCode(String trainCode) {
- this.trainCode = trainCode;
- }
- public String getStartStation() {
- return startStation;
- }
- public void setStartStation(String startStation) {
- this.startStation = startStation;
- }
- public String getArriveStation() {
- return arriveStation;
- }
- public void setArriveStation(String arriveStation) {
- this.arriveStation = arriveStation;
- }
- public String getUseDate() {
- return useDate;
- }
- public void setUseDate(String useDate) {
- this.useDate = useDate;
- }
- }
City.java
- package com.jushi.pojo;
- public class City {
- private String cityId;
- private String cityName;
- public String getCityId() {
- return cityId;
- }
- public void setCityId(String cityId) {
- this.cityId = cityId;
- }
- public String getCityName() {
- return cityName;
- }
- public void setCityName(String cityName) {
- this.cityName = cityName;
- }
- }
接下来就是业务了。我们需要将它返回的数据集处理成我们需要的结果,所以用到了jdom。
代码如下:
TrainInfo.java
- package com.jushi.service;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.axis.message.MessageElement;
- import org.jdom.Document;
- import org.jdom.Element;
- import org.jdom.input.SAXBuilder;
- import cn.com.WebXml.GetDetailInfoByTrainCodeResponseGetDetailInfoByTrainCodeResult;
- import cn.com.WebXml.GetStationAndTimeByStationNameResponseGetStationAndTimeByStationNameResult;
- import cn.com.WebXml.TrainTimeWebServiceLocator;
- import cn.com.WebXml.TrainTimeWebServiceSoap;
- import com.jushi.pojo.Train;
- public class TrainInfo {
- //通过车次得到列车信息
- public ArrayList getInfo(String traincode){
- ArrayList trainlist = null;
- try{
- java.net.URLEncoder.encode("参数","UTF-8");
- TrainTimeWebServiceLocator service = new TrainTimeWebServiceLocator();
- TrainTimeWebServiceSoap client = service.getTrainTimeWebServiceSoap();
- GetDetailInfoByTrainCodeResponseGetDetailInfoByTrainCodeResult traininfo =
- client.getDetailInfoByTrainCode(traincode, "");//后面的是我新注册的userID: eb01f699583d44d4bdee0ed47c0397d5
- MessageElement[] msg = traininfo.get_any();
- List elementHead = msg[0].getChildren();//消息头,DataSet对象
- List elementBody = msg[1].getChildren();//消息体信息,DataSet对象
- if(elementBody.size()<=0){
- return null;
- }
- String str = elementBody.get(0).toString();//消息体的字符串形式
- saveXMLString(str,"train.xml");
- trainlist = loadXML("train.xml");
- }catch(Exception e){
- e.printStackTrace();
- }
- return trainlist;
- }
- 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 out = new FileWriter(file);
- out.write(xmlString);