WebService処理NetにおけるDataset問題解決方法
4785 ワード
ここで私は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クラスに情報をカプセル化し、
そして情報を処理し、
これでデータセットの読み取りが完了し、本人テストは正常で、不適切な点があれば、伝言を残してください.
まず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");
}
}
これでデータセットの読み取りが完了し、本人テストは正常で、不適切な点があれば、伝言を残してください.