調用WebService接口,並解析返回的XML文件

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章