测试调用天气预报的服务
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Test{
public static void main(String[] args) throws Exception {
String url = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName";
Map<String,Object> map = new HashMap<>();
map.put("theCityName","上海");
HttpResponse httpResponse = HttpRequest.post(url).contentType("application/x-www-form-urlencoded").form(map)
.send();
httpResponse.acceptEncoding("iso-8859-1");
String body = new String(httpResponse.bodyBytes(),"utf-8");
//打印返回结果
System.out.println(body);
//解析结果成对象
Map parse = parse(body);
System.out.println(parse.size());
}
public static Map<String,Object> map = new HashMap<String,Object>();
public static Map parse(String soap) throws DocumentException {
Document doc = DocumentHelper.parseText(soap);//报文转成doc对象
Element root = doc.getRootElement();//获取根元素,准备递归解析这个XML树
getCode(root);
return map;
}
public static void getCode(Element root){
if(root.elements()!=null){
List<Element> list = root.elements();//如果当前跟节点有子节点,找到子节点
for(Element e:list){//遍历每个节点
if(e.elements().size()>0){
getCode(e);//当前节点不为空的话,递归遍历子节点;
}
if(e.elements().size()==0){
map.put(e.getName(), e.getTextTrim());
}//如果为叶子节点,那么直接把名字和值放入map
}
}
}
}
maven依赖:
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-http</artifactId>
<version>RELEASE</version>
</dependency>
补充:天气预报webservice服务以.asmx结尾,asmx是.net的WebServices,属于B/S形式,用SOAP方式HTTP访问,用XML返回