WebService処理NetにおけるDataset問題解決方法


ここで私はAsixフレームワークで解決しています.Asixパッケージの下にWSDL 2 Javaというクラスがあり、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,G e t D a i l I n f o B y T r i n C o d e S e P o n s e G e t D a i l InfoByTrainCodeResultといういくつかのクラスは、
まずPojoクラスに情報をカプセル化し、
public class Train {
	private String trainStation; 
	private String arriveTime; 
	private String startTime; 
	private String km;
	public String getArriveTime() {
		return arriveTime;
	}
	public void setArriveTime(String arriveTime) {
		this.arriveTime = arriveTime;
	}
	public String getKm() {
		return km;
	}
	public void setKm(String km) {
		this.km = km;
	}
	public String getStartTime() {
		return startTime;
	}
	public void setStartTime(String startTime) {
		this.startTime = startTime;
	}
	public String getTrainStation() {
		return trainStation;
	}
	public void setTrainStation(String trainStation) {
		this.trainStation = trainStation;
	} 

}

そして情報を処理し、
public class TrainInfo {
	public ArrayList getInfo(String traincode) {
		ArrayList trainList = null;
		try {
			TrainTimeWebServiceLocator service = new TrainTimeWebServiceLocator();
			TrainTimeWebServiceSoap client = service.getTrainTimeWebServiceSoap();
			GetDetailInfoByTrainCodeResponseGetDetailInfoByTrainCodeResult traininfo =  client.getDetailInfoByTrainCode(traincode, "");
			MessageElement[] traElt = traininfo.get_any();
			List trainElementHead = traElt[0].getChildren();//   ,DataSet      
	        List trainElementBody = traElt[1].getChildren();//     ,DataSet    
	        if (trainElementBody.size() <= 0){    
	            //     ,        
	            return null;
	        }    
            String nn = trainElementBody.get(0).toString();//             
            saveXMLString(nn,"train.xml");
            trainList = loadXML("train.xml");
            /*for(Iterator iter=trainList.iterator(); iter.hasNext();) {
            	Train train = (Train)iter.next();
            	System.out.println(train.getArriveTime());
            }*/
	            
		} 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 fileOut = new FileWriter(file);    
		    fileOut.write(XMLString);    
		    fileOut.close();    
		}    
	}
	
	 public static ArrayList loadXML(String path) throws Exception {
		 //Train train = null;
		 ArrayList<Train> trainList = null;
		 FileInputStream fi = null;
		 try {
			 fi = new FileInputStream(path);
			 trainList = new ArrayList<Train>();
			 SAXBuilder sb = new SAXBuilder();    
			 Document doc = sb.build(fi);    
			 Element root = doc.getRootElement(); //          
			 List focs = root.getChildren();
			 Element foc = null;
			 Train train = null;
			 
			 for(int i=0; i<focs.size(); i++) {
				 train = new Train();
				 foc = (Element) focs.get(i);
				 train.setArriveTime(foc.getChild("ArriveTime").getText());
				 train.setKm(foc.getChild("KM").getText());
				 train.setStartTime(foc.getChild("StartTime").getText());
				 train.setTrainStation(foc.getChild("TrainStation").getText());
				 
				 trainList.add(train);
			 }
		 } catch (Exception e) {
			 e.printStackTrace();
		 }
		 return trainList;
	 }
	 public static void main(String[] args) {
		 new TrainInfo().getInfo("1132");
	 }
}

これでデータセットの読み取りが完了し、本人テストは正常で、不適切な点があれば、伝言を残してください.