dom4j调用webservice返回xml形式的String类型的数据(soap头请求方式)实例
package cn.xuediit.dom4j;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.URL;import java.net.URLConnection;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;/***要导入dom4j-1.6.1.jar * DomXMLString.java(一般而言,只要NETDATA_URL地址访问正常,本程序即可正常运行) * @author xuechong * @time 6/12/2010 12:09 * @src http://eric-619.iteye.com/blog/693154 * @title dom4j调用webservice返回xml形式的String类型的数据(soap头请求方式) * 根据url来定,浏览器中能得到什么,java程序这里就能输出什么 */@SuppressWarnings("unused")public class Weather{//远程WebService接口url private static String NETDATA_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; public static void main(String args[]){Document document = getWeatherDocument("菏泽");if(document != null){System.out.println(document.asXML());}}public static Document getWeatherDocument(String city){Document document = null;SAXReader reader = new SAXReader();String str = "";Map<String, String> map = new HashMap<String, String>();reader.getDocumentFactory().setXPathNamespaceURIs(map);try {InputStream inputStream = getSoapInputStream(city); //得到输入流document = reader.read(inputStream); //将输入流转化为document} catch (Exception e){e.printStackTrace();}return document;}public static InputStream getSoapInputStream(String city) throws Exception {try{String soap = getSoapRequest(city);if(soap == null){return null;}URL url = new URL(NETDATA_URL);URLConnection conn = url.openConnection();conn.setUseCaches(false);conn.setDoInput(true);conn.setDoOutput(true);//参数参考http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getWeatherbyCityNameconn.setRequestProperty("Content-Length", Integer.toString(soap.length()));conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");conn.setRequestProperty("SOAPAction", "http://WebXml.com.cn/getWeatherbyCityName");OutputStream outputStream = conn.getOutputStream();OutputStreamWriter outputSW = new OutputStreamWriter(outputStream, "utf-8");outputSW.write(soap);outputSW.flush();outputSW.close();InputStream inputStream = conn.getInputStream();return inputStream;}catch(Exception e){e.printStackTrace();return null;}}/** * 获取soap请求头,并替换其中的标志符号为用户的自定义输入符号 * @param city 用户输入城市名 * @return 用户将要发送给服务器的soap请求 */private static String getSoapRequest(String city){StringBuilder sb = new StringBuilder();//参数参考http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getWeatherbyCityNamesb.append("<?xml version='1.0' encoding='utf-8'?>"+ "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+ "xmlns:xsd='http://www.w3.org/2001/XMLSchema' "+ "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"+ "<soap:Body>" + "<getWeatherbyCityName xmlns='http://WebXml.com.cn/'>"+ "<theCityName>" + city + "</theCityName>"+ "</getWeatherbyCityName>"+ "</soap:Body>"+ "</soap:Envelope>");return sb.toString();}} 1 楼 rainerliu 2010-06-24 支持,不错! 2 楼 beilejiang 2011-03-14 嗯,但是如果返回的数据量很大,如达到了400K,这样的该如何做呢?求教 3 楼 shaomeng95 2011-03-14 兄弟 你这没啥意义啊