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