学习Webservice之入天气小试

主要方法是:通过程序中设置代理用公司内网访问外部Webservice


public InputStream getSoapInputStream(String url) {
InputStream inputStream = null;
try {
URL urlObj = new URL(url);
InetSocketAddress addr = new InetSocketAddress("172.17.18.80", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
HttpURLConnection urlConn = (HttpURLConnection) urlObj
.openConnection(proxy);
urlConn.setRequestProperty("Host", SERVICES_HOST); // 具体webService相关
urlConn.setRequestMethod("GET");
urlConn.connect();
inputStream = urlConn.getInputStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}

类文件:


Weather.java

package weather;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class weather {
// private static String SERVICES_HOST = "www.webxml.com.cn";
private static String SERVICES_HOST = "webservice.webxml.com.cn";

/**
* 城市代码 / 浦东: 2015
*/
private static int CITICODE = 2015;

public static void main(String[] args) throws Exception {
String time=null;
Calendar cal=Calendar.getInstance();
SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");//MM要大写
time=format.format(cal.getTime());

String desc = "今天是" + time+",浦东";
desc += new weather().getWeatherStr();
System.out.println(desc);
}

/**
* Sos,MMyTest
* */
public InputStream getSoapInputStream(String url) {
InputStream inputStream = null;
try {
URL urlObj = new URL(url);
InetSocketAddress addr = new InetSocketAddress("172.17.18.80", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
HttpURLConnection urlConn = (HttpURLConnection) urlObj
.openConnection(proxy);
urlConn.setRequestProperty("Host", SERVICES_HOST); // 具体webService相关
urlConn.setRequestMethod("GET");
urlConn.connect();
inputStream = urlConn.getInputStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}

public String getWeatherStr() {
String desc = "";
try {
List<String> weatherList = getWeather(CITICODE);

if (weatherList != null && weatherList.size() > 7) {
String tianqi = weatherList.get(7);
if (tianqi.contains("日")) {
tianqi = tianqi.substring(tianqi.indexOf("日") + 1);
}
String wendu = weatherList.get(8);
desc += ",天气" + tianqi;
desc += " ,";
desc += wendu.replace("℃", "度").replace("/", "--");
}
} catch (Exception e) {
e.printStackTrace();
return desc;
}
return desc;
}

public List<String> getWeather(int cityCode) {
List<String> weatherList = new ArrayList<String>();
Document document;
DocumentBuilderFactory documentBF = DocumentBuilderFactory
.newInstance();
documentBF.setNamespaceAware(true);
try {
DocumentBuilder documentB = documentBF.newDocumentBuilder();
InputStream inputStream = getSoapInputStream("http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theUserID=&theCityCode=2015");
document = documentB.parse(inputStream);
NodeList nl = document.getElementsByTagName("string");
int len = nl.getLength();
for (int i = 0; i < len; i++) {
Node n = nl.item(i);
String weather = n.getFirstChild().getNodeValue();
weatherList.add(weather);
}
inputStream.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (DOMException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return weatherList;
}
}

运行weather.java文件后打印出:

今天是2014-04-30,浦东,天气 晴转多云 ,14度--24度

学习Webservice之入天气小试,布布扣,bubuko.com

时间: 2024-10-13 03:18:09

学习Webservice之入天气小试的相关文章

C语言学习笔记frist---输入两个数比较大小

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习: #include "stdafx.h" #include<stdio.h> // 包含stdio.h头文件 int max(int, int); // 函数声明 int main(){ int a,b; // 声明两个整型变量 printf("input two integer:");// 以空格为分隔 scanf("%d %d",&a,&

webserive学习记录4-获取天气的例子

学习到了如何创建使用webservice服务,下面就实际应用一下,从网络上获取天气数据. 先从网络上找到免费的webservice服务, 如这个网站:http://www.webxml.com.cn/zh_cn/web_services.aspx 保存该网页为wsdl文件,注意并不能直接使用,把文档中的<s:element ref="s:schema"/>的内容删掉,有几处就删几处.然后就可以通过wsdl文件生成客户端代码,通过前面的学习,可以用jdk自带的wsimport

curl通过调用WebService查询当前天气

<?php /** * curl通过调用WebService查询北京的当前天气 */ header("Content-type: text/html; charset=utf-8"); $data = 'theCityName=北京';//传递的参数 $curl_obj = curl_init(); //初始化一个cURL会话 //设置URL和相应的选项 curl_setopt($curl_obj, CURLOPT_URL, "http://www.webxml.com

Android学习--WebService初步

根据W3C的定义,Web Services(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包含.自描述和模块化的应用程序,它可以在网络中被描述.发布和调用,可以将它看作是基于网络的.分布式的模块化组件. Web Services是建立在通用协议的基础之上,如HTTP.SOAP.UDDI.WSDL等,这些协议在操作系统.编程语言和对象模型的选择上没有任何倾向,因此有着很强的生命力. Web Services的优势在于提供了不同应用程序平台之间的互操作,它使得基于组件的开发和W

WebService初入

WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于容器,可以发送一个xml作为其请求内容. WebService通常是基于http的远程方法调用(RMI),号称是可以返回远程对象,一般来说客户端可以象调用本地方法一样调用WebService的方法. 在各种各样的对 WebService的解释版本中, 足够官方, 却并没有太大帮助, 在我理解, WebServic

Spring AOP 自定义注解获取http接口及WebService接口入参和出参

注解方法实现过程中可以采用如下获取方式:-以下为例  HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 1.定义两个方法注解,分别标记要处理的http接口及Webservice接口: http接口注解 1 2 3 4 5 @Retention(RetentionPolicy.RUNTIME) @Target({ El

c++学习笔记01-输入输出流&amp;&amp;文件输入输出操作

const int size=50等于#define size 50 字符串默认以0结尾: 一.输入输出流 cin.get()会从输入中取走一个字符: cin.peek()会从输入中检测第一个字符: cin.ignore(7)忽略七个字符: cin.getline(buf,10)获取buf的十个字符: cin.read(buf,20)只接受十个字符: cin.gcount()获取字符数目: cout.precision()设置精确度: cout.write(buf,20)输出buf中的20个字符

学习Python 登入接口重写版

要求 1.输入用户名与密码 2.验证成功显示欢迎页 3.输入错误3次,锁定用户名 也是看了非常多的大神,老师,师兄的代码启发,才写出如下的重写版 这条代码也是瞎几把搞才研究出来的,具体原理不是很懂 name = dict(k.strip().split('=') for k in name_list.readlines()) 如果把 strip() 和 split('=') 的位置互换一下 那么就会报错 原因估计是 strip() 只能对 str类型操作已知BUG:1.输入2次同一个正确的用户名

分享一些学习webservice的资料

JAVA程序员从笨鸟到菜鸟之WebService