Java调用天气Webservice的小应用
废话不多说,直接贴代码:
CityReq.java
package com.weather; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="getWeatherbyCityName",namespace="http://WebXml.com.cn/") public class CityReq { private String theCityName; public String getTheCityName() { return theCityName; } @XmlElement(name="theCityName",namespace="http://WebXml.com.cn/") public void setTheCityName(String theCityName) { this.theCityName = theCityName; } }
WeatherWebServiceTest.java
package com.weather; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPMessage; import org.w3c.dom.Document; public class WeatherWebServiceTest { public static void main(String[] args) { // TODO Auto-generated method stub weather(); } static void weather(){ System.out.println("开始登陆..."); String wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"; System.out.println("wsdl:"+wsdl); HttpURLConnection urlconn=null; InputStream ins=null; OutputStream ous=null; try { URL u=new URL(wsdl); urlconn=(HttpURLConnection)u.openConnection(); urlconn.setDoOutput(true); urlconn.setRequestMethod("POST"); urlconn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8"); //urlconn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); //发送数据 ous=urlconn.getOutputStream(); Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); //编组 Marshaller marsh=JAXBContext.newInstance(CityReq.class).createMarshaller(); CityReq xmlf=new CityReq(); xmlf.setTheCityName("北京"); //JAXB.marshal(xmlf, new PrintWriter(System.out)); marsh.marshal(xmlf, document); //创建soapmessage对象 SOAPMessage soapMessage=MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(); SOAPBody soapBody=soapMessage.getSOAPBody(); soapBody.addDocument(document); SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope(); soapEnvelope.removeNamespaceDeclaration("env"); soapEnvelope.addNamespaceDeclaration("soap12", "http://www.w3.org/2003/05/soap-envelope"); soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance"); soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema"); soapEnvelope.setPrefix("soap12"); soapEnvelope.removeChild(soapEnvelope.getHeader()); soapBody.setPrefix("soap12"); //发送数据 soapMessage.writeTo(ous); // soapMessage.writeTo(System.out); System.out.println(urlconn.getResponseCode()); System.out.println(urlconn.getResponseMessage()); //接收数据 ins=urlconn.getInputStream(); //接收的数据需要解组? StringBuffer respMsg=new StringBuffer(); byte[] bytes=new byte[1024*1024]; int a=-1; while ((a=ins.read(bytes))!=-1) { respMsg.append(new String(bytes,0,a)); } System.out.println(respMsg.length()); System.out.println(respMsg); //解组的方式 /* SOAPMessage responseMessage=MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(null, ins); Unmarshaller unmarsh=JAXBContext.newInstance(CityResp.class).createUnmarshaller(); JAXBElement<CityResp> reponse= unmarsh.unmarshal(responseMessage.getSOAPBody().extractContentAsDocument(), CityResp.class); CityResp uresp= reponse.getValue(); System.out.println(uresp.getResult());*/ ous.close(); ins.close(); urlconn.disconnect(); } catch (Exception e) { e.printStackTrace(); }finally{ } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Java Annotation详解及实例代码,包括了Java Annotation详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 一、Annotation简介 从Java1.5开始,Java增加了元数据(MetaData)的支持,也就是Annotation(注释); Annotation能被用来为程序元素(类、方法、成员变量等)设置元数据; Annotation不能影响程序代
本文向大家介绍java HashMap详解及实例代码,包括了java HashMap详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 java HashMap Map集合的遍历 方式1,根据键查询值 获取所有键的集合 遍历键的集合,获取每一个键 根据键,查询值 方式2,根据键值对的对象查询键和值 获取所有键值对的对象的集合 遍历键值对的对象的集合,获取到每一个键值对的对象 根据键值对的对象
本文向大家介绍Java 回调机制(CallBack) 详解及实例代码,包括了Java 回调机制(CallBack) 详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 Java 回调机制 概要: 最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之
本文向大家介绍java 实现 stack详解及实例代码,包括了java 实现 stack详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 栈是限制插入和删除只能在一个位置上进行的 List,该位置是 List 的末端,叫做栈的顶(top),对于栈的基本操作有 push 和 pop,前者是插入,后者是删除。 栈也是 FIFO 表。 栈的实现有两种,一种是使用数组,一种是使用链表。 栈的应用 平
本文向大家介绍java LinkedList类详解及实例代码,包括了java LinkedList类详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 java LinkedList类详解 LinkedList的特有功能 A:添加功能 B:特有功能 C:删除功能 实例代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Java Vector类详解及实例代码,包括了Java Vector类详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 Java Vector类 Vector的特有功能 Vector出现较早,比集合更早出现 1:添加功能 2:获取功能 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!