热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用JAVA做一个天气预报webservice的客户端

http://blog.csdn.net/wfront/archive/2006/11/13/1382128.aspx 最近做的项目都是同webService有关的,自然就要关心一下we

http://blog.csdn.net/wfront/archive/2006/11/13/1382128.aspx

 

最近做的项目都是同webService有关的,自然就要关心一下webservice方面的资源。

 http://www.wopos.com/webservice/Weather.asmx?op=getWeather 是一个天气预报的webservice,从它的输出结果来看天气数据应该来自中央气象局的问天网。过这方面就不用再多关心了,我们关心的是怎样调用这个webservice。
       首先登录www.wopos.com/webservice/Weather.asmx?op=getWeather。可以看到如下的SOAP信息:

请求:

POST /webservice/Weather.asmx http/1.1
Host: www.wopos.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/getWeather"



 
   
      string
   

 

XML部分全部复制下来创建一个XML文件(普通的文本文件也可以),为了以后编程方面,把

       ...
      string
                      ...
改成

      ...
  ${city}$
                       ...

以weathersoap.xml保存在以后生成的类的同一目录。
响应:


http/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length



 
   
      string
   

 

在后面对XML的解释要用到响应部分的XML描述。

package jaqcy.weatherreport.client;

import java.io.*;
import java.net.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
/** *//**
 *
 * @author jaqcy
 */
public class WeatherReport
...{   
    private static String getSoapRequest(String city)//city为要查询天气的城市名
    ...{
        try
        ...{
            Class cls=Object.class;
            InputStreamReader isr=new InputStreamReader(cls.getResourceAsStream("/jaqcy/weatherreport/client/weathersoap.xml"));//读取存在weathersoap的SOAP信息
            BufferedReader reader=new BufferedReader(isr);
            String soap="";
            String tmp;
            while((tmp=reader.readLine())!=null)
            ...{
                soap+=tmp;
            }           
            reader.close();
            isr.close();
            return soap.replace("${city}$",city);//用传入的参数city替换原来的${city}$
        }
        catch (Exception ex)
        ...{
            ex.printStackTrace();
            return null;
        }
    }
  /**//*
    *返回InputStream是因为w3c DOM中Document的parse方法可
    *以接受InputStream类型的参数,方面在下一步对XML的解释
    */
    private static InputStream getSoapInputStream(String city)throws Exception
    ...{
        try
        ...{
            String soap=getSoapRequest(city);
            if(soap==null)
            ...{
                return null;
            }
            URL url=new URL("http://www.wopos.com/webservice/Weather.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://tempuri.org/getWeather"");

            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;
        }
    }
/**//*
  *用W3C DOM对返回的XML进行解释
  *
  */
    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("getWeatherResult");
            Node n=nl.item(0);
            String weather=n.getFirstChild().getNodeValue();
            is.close();
            return weather;
        }
        catch(Exception e)
        ...{
            e.printStackTrace();
            return null;
        }
    }
}

写个main方法检验一下结果:

 public static void main(String[] args)throws Exception
    ...{
        System.out.println(WeatherReport.getWeather("珠海"));
    }

结果如下:

城市==珠海,日期==4.02-4.03,图1==http://weather.tq121.com.cn/images/a1.gif,图2==http://weather.tq121.com.cn/images/00.gif,天气==多云,温度==28℃~22℃,风==微风,紫外线==弱
 

结果是有点乱,不过只要把它分割开来也是很容易的事。
        在自己的应用程序中加上天气预报的功能,对程序的竞争力也是有好处的,而且实现也相当的简单,何乐而不为呢?

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wfront/archive/2006/11/13/1382128.aspx


推荐阅读
  • 开发笔记:sql盲注之报错注入(附自动化脚本)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了sql盲注之报错注入(附自动化脚本)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文翻译自:WhatisaMavenartifact?什么是神器?为什么Maven需要它?#1楼参考:https:sta ... [详细]
  • 一、如果使用默认的1521端口,让实例自动注册到该监听上,那么local_listener无需设置,listener.ora文件按照正常方 ... [详细]
  • 问题说明最近看到Spring事务,在学习过程中遇到一个很苦恼问题搭建好Spring的启动环境后出现了一点小问题在启动时候却出现[java.lang.NullPointerExcep ... [详细]
  • 本文整理了Java中com.atlassian.scheduler.config.JobConfig类的一些代码示例,展示了JobConfig ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
  • 开发笔记:(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式相关的知识,希望对你有一定的参考价值。 ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • 突然觉得服务器ssh密码登录总是浪费一定量的时间,就想试试用sshKey进行登录。生成服务器sshkey和本地sshkey$ssh-keygen在服务器上生成一个authorize ... [详细]
  • [字符编码]Numeric Character Reference和HTML Entities(一)
    你是否在dreamweaver里编辑网页的时候看到Σ这样的东西,你曾使用过 这样的玩意吧,或者你在调试webservice的时候看到返回xml字符串中现 ... [详细]
  • 在实际的工作流业务开发中,当用户完成当前用户任务时,需要指定下一个用户任务的审核人。此时我们需要获取下一个节点的一些信息,来确定下一个用户任务的审核人有哪些。在实际工 ... [详细]
  • python 鸭子类型_Python中的鸭子输入是什么?
    python鸭子类型Python遵循EAFP(比许可更容易请求宽恕)而不是LBYL(跨越式)。EAFP的Python哲学在某 ... [详细]
author-avatar
落了个小妞农_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有