WebService处理.net中Dataset问题解决办法

在此我用的是Asix框架来解决的,在Asix包下有一个叫作WSDL2Java的类,可用来解析WSDL以生成Java代码供程序员使用,我尝试过用soap来处理Dataset,不过没有成功(浪费了不少时间)。
  首先下载Asix包,直接到Apache下就可以了,下载完成后将解压的webroot/lib下的包全部拷到JDK的lib目录下。然后由控制台进入Jdk目录,运行:
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl
红色部分是你要的文件调用的webservice程序的地址,就是上面说到的那个wsdl文件,当然前提你必须配置好了Java的环境变量,接下来你会看到在Jdk目录下生成出来了一个cn(适个人设置而定)文件夹,这里面就是Asix为我们生成的Java代码。
  然后将文件夹拷入你的项目的src目录下即可。生成出来的代码中我主要使用的是TrainTimeWebServiceLocator,TrainTimeWebServiceSoap,GetDetailInfoByTrainCodeResponseGetDetailInfoByTrainCodeResult这几个类,
  首先将信息封装到一个Pojo类里,

Java代码
  1. public class Train {  
  2.     private String trainStation;   
  3.     private String arriveTime;   
  4.     private String startTime;   
  5.     private String km;  
  6.     public String getArriveTime() {  
  7.         return arriveTime;  
  8.     }  
  9.     public void setArriveTime(String arriveTime) {  
  10.         this.arriveTime = arriveTime;  
  11.     }  
  12.     public String getKm() {  
  13.         return km;  
  14.     }  
  15.     public void setKm(String km) {  
  16.         this.km = km;  
  17.     }  
  18.     public String getStartTime() {  
  19.         return startTime;  
  20.     }  
  21.     public void setStartTime(String startTime) {  
  22.         this.startTime = startTime;  
  23.     }  
  24.     public String getTrainStation() {  
  25.         return trainStation;  
  26.     }  
  27.     public void setTrainStation(String trainStation) {  
  28.         this.trainStation = trainStation;  
  29.     }   
  30.   
  31. }  


 然后处理信息,

Java代码
  1. public class TrainInfo {  
  2.     public ArrayList getInfo(String traincode) {  
  3.         ArrayList trainList = null;  
  4.         try {  
  5.             TrainTimeWebServiceLocator service = new TrainTimeWebServiceLocator();  
  6.             TrainTimeWebServiceSoap client = service.getTrainTimeWebServiceSoap();  
  7.             GetDetailInfoByTrainCodeResponseGetDetailInfoByTrainCodeResult traininfo =  client.getDetailInfoByTrainCode(traincode, "");  
  8.             MessageElement[] traElt = traininfo.get_any();  
  9.             List trainElementHead = traElt[0].getChildren();//消息头,DataSet对象      
  10.             List trainElementBody = traElt[1].getChildren();//消息体信息,DataSet对象    
  11.             if (trainElementBody.size() <= 0){      
  12.                 //无返回记录,则无输出      
  13.                 return null;  
  14.             }      
  15.             String nn = trainElementBody.get(0).toString();//消息体的字符串形式      
  16.             saveXMLString(nn,"train.xml");  
  17.             trainList = loadXML("train.xml");  
  18.             /*for(Iterator iter=trainList.iterator(); iter.hasNext();) { 
  19.                 Train train = (Train)iter.next(); 
  20.                 System.out.println(train.getArriveTime()); 
  21.             }*/  
  22.                   
  23.         } catch(Exception e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.         return trainList;  
  27.     }  
  28.       
  29.     public static void saveXMLString(String XMLString, String fileName) throws IOException {      
  30.         File file = new File(fileName);      
  31.         if (file.exists()) {      
  32.             file.delete();      
  33.         }      
  34.         file.createNewFile();      
  35.         if (file.canWrite()) {      
  36.             FileWriter fileOut = new FileWriter(file);      
  37.             fileOut.write(XMLString);      
  38.             fileOut.close();      
  39.         }      
  40.     }  
  41.       
  42.      public static ArrayList loadXML(String path) throws Exception {  
  43.          //Train train = null;  
  44.          ArrayList<Train> trainList = null;  
  45.          FileInputStream fi = null;  
  46.          try {  
  47.              fi = new FileInputStream(path);  
  48.              trainList = new ArrayList<Train>();  
  49.              SAXBuilder sb = new SAXBuilder();      
  50.              Document doc = sb.build(fi);      
  51.              Element root = doc.getRootElement(); // 得到根元素      
  52.              List focs = root.getChildren();  
  53.              Element foc = null;  
  54.              Train train = null;  
  55.                
  56.              for(int i=0; i<focs.size(); i++) {  
  57.                  train = new Train();  
  58.                  foc = (Element) focs.get(i);  
  59.                  train.setArriveTime(foc.getChild("ArriveTime").getText());  
  60.                  train.setKm(foc.getChild("KM").getText());  
  61.                  train.setStartTime(foc.getChild("StartTime").getText());  
  62.                  train.setTrainStation(foc.getChild("TrainStation").getText());  
  63.                    
  64.                  trainList.add(train);  
  65.              }  
  66.          } catch (Exception e) {  
  67.              e.printStackTrace();  
  68.          }  
  69.          return trainList;  
  70.      }  
  71.      public static void main(String[] args) {  
  72.          new TrainInfo().getInfo("1132");  
  73.      }  
  74. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值