`

SOAP 获取 天气预报

阅读更多
package com.caituo.webservices;

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;

/**
* Java 通过调用外部WebService实现天气预报的功能
* @create time Mar 13, 2010
* @typename WeatherReport
*/
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;
   }
}

public static String getTodayeWeather(){
    String weather="";
    String city="武汉";
    StringBuffer sb = new StringBuffer();
    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");
        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();
       } catch (Exception e) {
           e.printStackTrace();
           return null;
       }
       String wearths=sb.toString();
       String[] weath=wearths.split("#");
       for (int i=0;i<weath.length;i++){
           System.out.println(i+":"+weath[i].trim());
       }
       String thisweath=weath[6];
       String[] thisweat=thisweath.split(" ");
       weather=thisweat[1]+" "+weath[5];
    return weather;
}

/**
* 测试用
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
    System.out.println(getTodayeWeather());
   System.out.println("po&oi".split("&").length) ;
   System.out.println("##".split("#").length) ;
/*   System.out.println(getWeather("长沙"));
*/}
}

分享到:
评论

相关推荐

    android利用SOAP实现天气预报

    本教程将详细介绍如何在Android应用中利用SOAP来获取并显示天气预报。 一、SOAP基础 SOAP是一种轻量级的消息协议,它的主要特点是基于XML,允许数据以自描述的方式传输。SOAP消息通常包含三个主要部分:Envelope、...

    android开发soap协议查询天气预报功能源码

    本项目“android开发soap协议查询天气预报功能源码”提供了一个实例,展示了如何在Android应用中实现SOAP协议来获取并展示天气预报信息。以下是关于SOAP协议、天气预报功能以及在Android中实现这两个概念的关键知识...

    C#获取实时天气预报

    在本例中,我们将关注的是获取天气预报的SOAP Web服务。 要调用Web服务,我们需要在C#项目中添加对服务的引用。这可以通过Visual Studio的“添加服务引用”功能实现。输入提供天气预报的Web服务URL,例如...

    Web Service 解读天气预报WSDL获取天气程序

    在这个特定的项目中,我们关注的是如何使用Web Service来获取天气预报信息,特别是通过解析WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于定义服务的位置、接口以及如何调用这些服务。 ...

    WebService获得天气预报demo Delphi7

    【WebService获得天气预报demo Delphi7】是一个基于Delphi7开发的应用程序,它演示了如何通过使用WebService接口来获取特定城市的天气预报信息。这个项目主要关注的是如何在Delphi7中实现对网络服务的调用,以及如何...

    Android利用SOAP协议调用天气预报服务.pdf

    本文探讨了如何在Android平台上利用SOAP协议调用天气预报服务,开发出能够实时获取天气信息的手机应用。 首先,开发环境的设置是开发Android应用的基础。本文提到的开发环境包括使用Microsoft Windows 7操作系统,...

    WebService 的调用天气预报(附源码Demo)

    通过运行这个主类,你可以看到如何实际调用天气预报服务并获取结果。这是一个很好的学习和实践WebService调用的起点。 总结起来,本示例涵盖了以下几个关键知识点: - WebService的基本概念及其在跨平台通信中的...

    ASP.NET获得天气预报信息

    在这个特定的场景中,我们将探讨如何使用 ASP.NET 来获取天气预报信息,这通常涉及到通过调用 WebService 服务来实现。 首先,我们要理解什么是 WebService。WebService 是一种基于开放标准(如 SOAP、WSDL 和 UDDI...

    Java使用SOAP获取webservice实例解析

    ### Java使用SOAP获取WebService实例解析 #### WebService简介 WebService是一种跨编程语言和操作系统平台的、在网络上进行数据交换的一种方式。它使用标准的Internet协议,如HTTP、XML、SOAP等来实现不同系统间的...

    webservice天气预报例子cxf实例

    在部署这个Web服务后,客户端可以通过发送SOAP请求或者使用RESTful风格的HTTP请求来获取天气预报。对于SOAP,请求将包含在XML消息中,而REST请求则可以使用GET或POST方法,URL中可能包含城市名作为参数。 CXF还提供...

    C#调用WebService实现天气预报

    总的来说,通过C#调用WebService获取天气预报,我们需要理解HTTP通信、SOAP协议、XML解析以及.NET框架提供的相关类库。这是一个典型的客户端-服务器交互场景,展示了C#在集成外部服务时的强大能力。在实际开发中,...

    在asp.ne中t使用WebService获取天气预报信息的例子

    在这个例子中,我们将探讨如何在ASP.NET环境中利用WebService来获取实时的天气预报信息。WebService是一种基于HTTP协议的网络服务,允许不同系统之间进行数据交换,实现跨平台的数据共享。 首先,我们需要了解如何...

    webservice 实现天气预报功能

    在实现天气预报功能时,首先我们需要找到一个公开的天气预报Web Service接口,这个接口通常会提供一个SOAP地址(也称为WSDL,Web Service Definition Language文件),开发者可以向这个地址发送SOAP请求来获取天气...

    使用Web Service获取天气预报

    "使用Web Service获取天气预报" 在本篇文章中,我们将学习如何使用Web Service获取天气预报。Web Service是一种基于网络的远程调用技术,允许不同的应用程序之间进行交互和数据交换。通过使用Web Service,我们可以...

    天气预报的web服务

    天气预报的Web服务是一种基于互联网技术的气象信息提供方式,它允许用户通过Web接口获取实时或预测的天气数据。这种服务通常由气象部门或专业气象服务公司提供,能够为个人、企业乃至政府机构提供便利的天气查询功能...

    soap获取天气lib静态库

    这些API通常提供SOAP接口,开发者通过发送特定的SOAP请求,即可获取到天气预报、历史天气等信息。 8. 返回string字段: 在SOAP通信中,返回的数据通常以XML格式封装在Body部分,项目描述中提到返回的是字符串字段,...

    在线获取天气预报 WebService

    【在线获取天气预报 WebService】是一种利用网络服务接口获取实时或未来天气信息的技术。WebService是基于Web的应用程序接口,它允许不同系统之间的数据交换,使得应用程序可以跨越平台限制,共享资源。在这个场景中...

    Android之Webservice详解与调用天气预报Webservice完整实例

    8. **UI更新**:在获取到天气预报数据后,我们需要将其展示在Android应用的用户界面上。这通常涉及异步操作,可以使用AsyncTask或其他异步处理机制,以避免阻塞主线程。 9. **权限管理**:在AndroidManifest.xml中...

    Webservice入门教程_编写天气预报的webservice示例代码

    本教程通过创建一个天气预报Web服务示例,介绍了Web服务的基础知识,包括SOAP、WSDL、服务的创建与调用。了解这些概念和技术后,你可以进一步探索更复杂的Web服务应用场景,如RESTful API、Web服务组合等。希望这个...

Global site tag (gtag.js) - Google Analytics