欢迎来到天天文库
浏览记录
ID:6031936
大小:35.78 KB
页数:7页
时间:2017-12-31
《java调用.net的webservice》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
最近做的项目都是同webService有关的,自然就要关心一下webservice方面的资源。http://www.wopos.com/webservice/Weather.asmx?op=getWeather是一个天气预报的webservice,从它的输出结果来看天气数据应该来自中央气象局的问天网http://www.tq121.com.cn/不过这方面就不用再多关心了,我们关心的是怎样调用这个webservice。 首先登录www.wopos.com/webservice/Weather.asmx?op=getWeather。可以看到如下的SOAP信息 请求:以下内容为程序代码:POST /webservice/Weather.asmx http/1.1Host: www.wopos.comContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://tempuri.org/getWeather" string 把XML部分全部复制下来创建一个XML文件(普通的文本文件也可以),为了以后编程方便,把以下内容为程序代码: ... string ...改成以下内容为程序代码: ... ${city}$ ...以weathersoap.xml保存在以后生成的类的同一目录。响应:以下内容为程序代码:http/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length string 这里的getWeatherResult这个就是要被调用的方法的名字在后面对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();//如果有多个参数可以连续replace 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);//方法的名字getWeatherResult 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℃,风==微风,紫外线==弱结果是有点乱,不过只要把它分割开来也是很容易的事。 在自己的应用程序中加上天气预报的功能,对程序的竞争力也是有好处的,而且实现也相当的简单,何乐而不为呢? Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=669923
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处