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来获取并显示天气预报。 一、SOAP基础 SOAP是一种轻量级的消息协议,它的主要特点是基于XML,允许数据以自描述的方式传输。SOAP消息通常包含三个主要部分:Envelope、...
本项目“android开发soap协议查询天气预报功能源码”提供了一个实例,展示了如何在Android应用中实现SOAP协议来获取并展示天气预报信息。以下是关于SOAP协议、天气预报功能以及在Android中实现这两个概念的关键知识...
在本例中,我们将关注的是获取天气预报的SOAP Web服务。 要调用Web服务,我们需要在C#项目中添加对服务的引用。这可以通过Visual Studio的“添加服务引用”功能实现。输入提供天气预报的Web服务URL,例如...
在这个特定的项目中,我们关注的是如何使用Web Service来获取天气预报信息,特别是通过解析WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于定义服务的位置、接口以及如何调用这些服务。 ...
【WebService获得天气预报demo Delphi7】是一个基于Delphi7开发的应用程序,它演示了如何通过使用WebService接口来获取特定城市的天气预报信息。这个项目主要关注的是如何在Delphi7中实现对网络服务的调用,以及如何...
本文探讨了如何在Android平台上利用SOAP协议调用天气预报服务,开发出能够实时获取天气信息的手机应用。 首先,开发环境的设置是开发Android应用的基础。本文提到的开发环境包括使用Microsoft Windows 7操作系统,...
通过运行这个主类,你可以看到如何实际调用天气预报服务并获取结果。这是一个很好的学习和实践WebService调用的起点。 总结起来,本示例涵盖了以下几个关键知识点: - WebService的基本概念及其在跨平台通信中的...
在这个特定的场景中,我们将探讨如何使用 ASP.NET 来获取天气预报信息,这通常涉及到通过调用 WebService 服务来实现。 首先,我们要理解什么是 WebService。WebService 是一种基于开放标准(如 SOAP、WSDL 和 UDDI...
### Java使用SOAP获取WebService实例解析 #### WebService简介 WebService是一种跨编程语言和操作系统平台的、在网络上进行数据交换的一种方式。它使用标准的Internet协议,如HTTP、XML、SOAP等来实现不同系统间的...
在部署这个Web服务后,客户端可以通过发送SOAP请求或者使用RESTful风格的HTTP请求来获取天气预报。对于SOAP,请求将包含在XML消息中,而REST请求则可以使用GET或POST方法,URL中可能包含城市名作为参数。 CXF还提供...
总的来说,通过C#调用WebService获取天气预报,我们需要理解HTTP通信、SOAP协议、XML解析以及.NET框架提供的相关类库。这是一个典型的客户端-服务器交互场景,展示了C#在集成外部服务时的强大能力。在实际开发中,...
在这个例子中,我们将探讨如何在ASP.NET环境中利用WebService来获取实时的天气预报信息。WebService是一种基于HTTP协议的网络服务,允许不同系统之间进行数据交换,实现跨平台的数据共享。 首先,我们需要了解如何...
在实现天气预报功能时,首先我们需要找到一个公开的天气预报Web Service接口,这个接口通常会提供一个SOAP地址(也称为WSDL,Web Service Definition Language文件),开发者可以向这个地址发送SOAP请求来获取天气...
"使用Web Service获取天气预报" 在本篇文章中,我们将学习如何使用Web Service获取天气预报。Web Service是一种基于网络的远程调用技术,允许不同的应用程序之间进行交互和数据交换。通过使用Web Service,我们可以...
天气预报的Web服务是一种基于互联网技术的气象信息提供方式,它允许用户通过Web接口获取实时或预测的天气数据。这种服务通常由气象部门或专业气象服务公司提供,能够为个人、企业乃至政府机构提供便利的天气查询功能...
这些API通常提供SOAP接口,开发者通过发送特定的SOAP请求,即可获取到天气预报、历史天气等信息。 8. 返回string字段: 在SOAP通信中,返回的数据通常以XML格式封装在Body部分,项目描述中提到返回的是字符串字段,...
【在线获取天气预报 WebService】是一种利用网络服务接口获取实时或未来天气信息的技术。WebService是基于Web的应用程序接口,它允许不同系统之间的数据交换,使得应用程序可以跨越平台限制,共享资源。在这个场景中...
8. **UI更新**:在获取到天气预报数据后,我们需要将其展示在Android应用的用户界面上。这通常涉及异步操作,可以使用AsyncTask或其他异步处理机制,以避免阻塞主线程。 9. **权限管理**:在AndroidManifest.xml中...
本教程通过创建一个天气预报Web服务示例,介绍了Web服务的基础知识,包括SOAP、WSDL、服务的创建与调用。了解这些概念和技术后,你可以进一步探索更复杂的Web服务应用场景,如RESTful API、Web服务组合等。希望这个...