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{

    }
  }

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java客户端调用.NET的WebService实例

    项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来. 1,新建.NET WebService.只在原方法上加上一个string类型的参数str [WebMethod] public string HelloWorld(string str) { return "Hello World"; } 2,新建Java的WebService客户端,lib引入以下5个jar包(我是用idea生成的WebService客户端,会下载7个包,我试着删掉了lo

  • .net实现webservice简单实例分享

    原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用于数据交换.提供服务接口优点:可跨平台.部署简单调用方便.无需额外客户端支持 一.创建一个WebService服务1.创建一个普通的Asp.Net Web应用程序,名称为WebServiceDemo 2.在刚创建的web程序里添加一个WebService服务文件,名称为TestService.asm

  • java通过客户端访问服务器webservice的方法

    本文实例讲述了java通过客户端访问服务器webservice的方法.分享给大家供大家参考,具体如下: InputStream in = TestClient.class.getClassLoader().getResourceAsStream("datasource.properties"); Properties prop = new Properties(); prop.load(in); String endpoint = prop.getProperty("url&

  • Java调用WebService接口的方法

    本文实例讲述了Java调用WebService接口的方法.分享给大家供大家参考.具体如下: 这里讲述有参方法Add,代码如下: 复制代码 代码如下: public static void addTest() {         try ...{             Integer i = 1;             Integer j = 2;                         //WebService URL             String service_url =

  • 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/

  • java多线程编程技术详解和实例代码

     java多线程编程技术详解和实例代码 1.   Java和他的API都可以使用并发. 可以指定程序包含不同的执行线程,每个线程都具有自己的方法调用堆栈和程序计数器,使得线程在与其他线程并发地执行能够共享程序范围内的资源,比如共享内存,这种能力被称为多线程编程(multithreading),在核心的C和C++语言中并不具备这种能力,尽管他们影响了JAVA的设计. 2.   线程的生命周期 新线程的生命周期从"新生"状态开始.程序启动线程前,线程一直是"新生"状态:

  • Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员. 非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量. 非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被运行. 括号里的是初始化块,这里面的代码在创建Java对象时执行,而且在构造器之前执行! 其实初始化块就是构造器的补充,初始化块是

  • Java Process类的详解及实例代码

    Java Process类的详解 前言: 今天用了下Java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档. 对Process类的简要说明: Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序  该类提供进程的输入.执行输出到进程.等待进程的完成和检查进程的退出状态及销毁进程的方法 ProcessBuilder.start()和Runtime.exec方法创建

  • java DataInputStream和DataOutputStream详解及实例代码

    java DataInputStream和DataOutputStream详解 操作基本数据类型的流 DataInputStream DataOutputStream import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public c

  • Java 垃圾回收机制详解及实例代码

     Java 垃圾回收机制详解 乍一看,垃圾回收所做的事情应当恰如其名--查找并清除垃圾.事实上却恰恰相反.垃圾回收会跟踪所有仍在使用的对象,然后将剩余的对象标记为垃圾.牢记了这点之后,我们再来深入地了解下这个被称为"垃圾回收"的自动化内存回收在JVM中到底是如何实现的. 手动管理内存 在介绍现代版的垃圾回收之前,我们先来简单地回顾下需要手动地显式分配及释放内存的那些日子.如果你忘了去释放内存,那么这块内存就无法重用了.这块内存被占有了却没被使用.这种场景被称之为内存泄露. 下面是用C写

  • java 嵌套类的详解及实例代码

    java 嵌套类 到现在为止,我们都是在Java文件中直接定义类.这样的类出现在包(package)的级别上.Java允许类的嵌套定义. 这里将讲解如何在一个类中嵌套定义另一个类. 内部类 Java允许我们在类的内部定义一个类.如果这个类是没有static修饰符,那么这样一个嵌套在内部的类称为内部类(inner class). 内部类被认为是外部对象的一个成员.在定义内部类时,我们同样有访问权限控制(public, private, protected). 在使用内部类时,我们要先创建外部对象.

  • Java 回调机制(CallBack) 详解及实例代码

     Java 回调机制 概要: 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题.但是,对于初学的我来说,缺了一个循序渐进的过程.此处,将我对回调机制的个人理解,按照由浅到深的顺序描述一下,如有不妥之处,望不吝赐教! 开始之前,先想象一个场景:幼稚园的小朋友刚刚学习了10以内的加法. 第1章. 故事的缘起 幼师

  • Java 线程池ExecutorService详解及实例代码

    Java 线程池ExecutorService 1.线程池 1.1什么情况下使用线程池 单个任务处理的时间比较短. 将需处理的任务的数量大. 1.2使用线程池的好处 减少在创建和销毁线程上所花的时间以及系统资源的开销. 如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及"过度切换"; 2.ExecutorService和Executors 2.1简介 ExecutorService是一个接口,继承了Executor, public interface ExecutorS

  • Java Serializable和Parcelable详解及实例代码

    对 Serializable和Parcelable理解 1.首先他们两个接口都是为了实现对象的序列化,使之可以传递,所谓序列化就是将对象信息装换成可以存储的介质的过程. 2.Serializable是jdk所提供的序列化接口,该接口存在于io包下,可想用于输入输出,使用非常简单,只要让你的类实现此接口就ok了:可以使用transient关键字修饰你不想序列化的属性. 3.Parcelable是sdk所提供的序列化接口,使用较上者麻烦,实现此接口后,需要重写writeToParcel方法,将需要序

随机推荐