Java 调用天气 webservice 详解及实例代码
这里有新鲜出炉的 Java 设计模式, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 Java 调用天气 Webservice 详解及实例代码的相关资料, 这里附实例代码, 使用 java 调用 webservice 的小应用, 需要的朋友可以参考下
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 {}
- }
- }
来源: http://www.phperz.com/article/18/0208/359317.html