1、調用WebSevice、解析XML文件所需的包
使用axis方式調用,需要axis、commons-discovery、jaxrpc、wsdl等jar
dom方式解析,主要是dom4j這個jar
//wesevice所需包
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.Constants;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
//解析json
import net.sf.json.JSONObject;
//解析xml所需包
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentHelper;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
2.調用WebService接口
// 遠程調用路徑 ,無後綴wsdl
String endpoint = "http://IP地址:端口號/*/*/*";
String result = "call failed!";
//調用方法名
String mothod = "Test";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
//new QName的URL是要指向的命名空間的名稱,這個URL地址在你的wsdl打開後可以看到的,
//上面有寫着targetNamespace="http://*.*.*/",這個就是你的命名空間值了;
call.setOperationName(mothod); // 調用的方法名
// 設置參數名 :參數名 ,參數類型:String, 參數模式:'IN' or 'OUT'
call.addParameter(new QName("命名空間","param1"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName("命名空間","param2"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName("命名空間","param3"),XMLType.XSD_STRING,ParameterMode.IN);
call.setEncodingStyle("UTF-8");
String param1 = "";
String param2 = "";
String param3 = "";
call.setReturnType(Constants.XSD_STRING);
call.setUseSOAPAction(true);
try {
result = (String) call.invoke(new Object[] {param1,param2,param3});// 遠程調用
System.out.println(result);
JSONObject resultJson = JSONObject.fromObject(result);
String resultDataXML = resultJson.getString("data");
if( "".equals(resultDataXML) && resultDataXML != null ){
Boolean flag = RealResultXML(resultDataXML);
if(flag){
System.out.println("解析成功");
}else {
System.out.println("解析失敗");
}
}else{
System.out.println("無數據");
}
} catch (Exception e) {
System.out.println(result);
e.printStackTrace();
}
2.解析XML文件
private Boolean RealResultXML(String resultDataXML) {
Boolean flag = true;
Document doc = null;
try {
//例子
doc = DocumentHelper.parseText(resultDataXML); // 將字符串轉爲XML
Element rootElt = doc.getRootElement(); // 獲取根節點
System.out.println("根節點:" + rootElt.getName()); // 拿到根節點的名稱
//解析只能一層一層的獲取,如得到html標籤不能直接得到body內部的標籤(假設)
Element body = rootElt.element("body"); // 獲取根節點下子節點
//多個p
Iterator p = rootElt.elementIterator("p");
// 遍歷row節點
while (p.hasNext()) {
Element curP = (Element) p.next();//當前的p標籤
String son1 = curP.element("son1").getTextTrim(); // 拿到p節點下的子節點row值
String son2 = curP.element("son2").getTextTrim(); // 拿到p節點下的子節點row值
String son3 = curP.element("son3").getTextTrim(); // 拿到p節點下的子節點row值
System.out.println("內容是:" + son1 + "," + son2 + "," + son3);
}
}catch( Exception e ){
flag = false;
}
return flag;
}