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

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页