java解析soap

package com.arj.comm.util;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class WeatherReport {
 /**
  * 获取SOAP的请求头,并替换其中的标志符号为用户输入的城市
  *
  * 编写者:王景辉
  *
  * @param city
  *            用户输入的城市名称
  * @return 客户将要发送给服务器的SOAP请求
  */
 private static String getSoapRequest(String city) {
  StringBuilder sb = new StringBuilder();
  sb
    .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();
 }

 /**
  * 用户把SOAP请求发送给服务器端,并返回服务器点返回的输入流
  *
  * 编写者:王景辉
  *
  * @param city
  *            用户输入的城市名称
  * @return 服务器端返回的输入流,供客户端读取
  * @throws Exception
  */
 private static InputStream getSoapInputStream(String city) throws Exception {
  try {
   String soap = getSoapRequest(city);
   if (soap == null) {
    return null;
   }
   URL url = new URL(
     "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
   URLConnection conn = url.openConnection();
   conn.setUseCaches(false);
   conn.setDoInput(true);
   conn.setDoOutput(true);

   conn.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 os = conn.getOutputStream();
   OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
   osw.write(soap);
   osw.flush();
   osw.close();

   InputStream is = conn.getInputStream();
   return is;
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }

 /**
  * 对服务器端返回的XML进行解析
  *
  * 编写者:王景辉
  *
  * @param city
  *            用户输入的城市名称
  * @return 字符串 用,分割
  */
 public static String getWeather(String city) {
  try {
   Document doc;
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setNamespaceAware(true);
   DocumentBuilder db = dbf.newDocumentBuilder();
   InputStream is = getSoapInputStream(city);
   doc = db.parse(is);
   NodeList nl = doc.getElementsByTagName("string");
   StringBuffer sb = new StringBuffer();
   for (int count = 0; count < nl.getLength(); count++) {
    Node n = nl.item(count);
    if(n.getFirstChild().getNodeValue().equals("查询结果为空!")) {
     sb = new StringBuffer("#") ;
     break ;
    }
    sb.append(n.getFirstChild().getNodeValue() + "#\n");
   }
   is.close();
   return sb.toString();
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }
 /**
  * 测试用
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
  System.out.println(getWeather("长沙"));
  System.out.println("po&oi".split("&").length) ;
  System.out.println("##".split("#").length) ;
 }
}

posted on 2011-01-27 16:11 周会 阅读(4659) 评论(1)  编辑  收藏

评论

# re: java解析soap 2013-05-31 12:57 楚原

挺好的,请问,图片信息是在网站下载吗?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜