• 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{
                
            }
        }
        
         
    }
  • 相关阅读:
    C语言小项目-基于TCP协议和SOCKET编程的网络通信系统
    c语言小项目-使用mysql数据库的图书管理系统
    常用功能函数-密码登陆函数
    C++小项目-吃豆子游戏
    C语言小项目-火车票订票系统
    使用单向链表保存大量数据的基础程序框架
    Oracle创建用户并赋予权限
    Fibonacci sequence 求余数
    sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理
    C++不同进制整数
  • 原文地址:https://www.cnblogs.com/xiaoymin/p/4534708.html
Copyright © 2020-2023  润新知