zoukankan      html  css  js  c++  java
  • Java使用SOAP获取webservice实例解析

    1.webservice提供方:http://www.webxml.com.cn/zh_cn/index.aspx
    2.下面我们以“获得腾讯QQ在线状态”为例。
    参数截图如下图:

    SOAP 1.1

    以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。

    [http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?op=qqCheckOnline] 点击前面的网址,查看对应参数信息。

        
    3.Java程序

    package junit;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import org.junit.Test;
    
    public class JxSendSmsTest {
    
        /**
         * 获得腾讯QQ在线状态
         *
         * 输入参数:QQ号码 String,默认QQ号码:8698053。返回数据:String,Y = 在线;N = 离线;E = QQ号码错误;A = 商业用户验证失败;V = 免费用户超过数量
         * @throws Exception
         */
        @Test
        public void sendSms() throws Exception {
            String qqCode = "416501600";//qq号码
            String urlString = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";
            String xml = JxSendSmsTest.class.getClassLoader().getResource("SendInstantSms.xml").getFile();
            String xmlFile=replace(xml, "qqCodeTmp", qqCode).getPath();
            String soapActionString = "http://WebXml.com.cn/qqCheckOnline";
            URL url = new URL(urlString);
            HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
            File fileToSend = new File(xmlFile);
            byte[] buf = new byte[(int) fileToSend.length()];
            new FileInputStream(xmlFile).read(buf);
            httpConn.setRequestProperty("Content-Length", String.valueOf(buf.length));
            httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
            httpConn.setRequestProperty("soapActionString", soapActionString);
            httpConn.setRequestMethod("POST");
            httpConn.setDoOutput(true);
            httpConn.setDoInput(true);
            OutputStream out = httpConn.getOutputStream();
            out.write(buf);
            out.close();
    
            byte[] datas=readInputStream(httpConn.getInputStream());
            String result=new String(datas);
            //打印返回结果
            System.out.println("result:" + result);
        }
    
        /**
         * 文件内容替换
         * 
         * @param inFileName 源文件
         * @param from
         * @param to
         * @return 返回替换后文件
         * @throws IOException
         * @throws UnsupportedEncodingException
         */
        public static File replace(String inFileName, String from, String to)
                throws IOException, UnsupportedEncodingException {
            File inFile = new File(inFileName);
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    new FileInputStream(inFile), "utf-8"));
            File outFile = new File(inFile + ".tmp");
            PrintWriter out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(new FileOutputStream(outFile), "utf-8")));
            String reading;
            while ((reading = in.readLine()) != null) {
                out.println(reading.replaceAll(from, to));
            }
            out.close();
            in.close();
            //infile.delete(); //删除源文件
            //outfile.renameTo(infile); //对临时文件重命名
            return outFile;
        }
        
        /**
         * 从输入流中读取数据
         * @param inStream
         * @return
         * @throws Exception
         */
        public static byte[] readInputStream(InputStream inStream) throws Exception{
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while( (len = inStream.read(buffer)) !=-1 ){
                outStream.write(buffer, 0, len);
            }
            byte[] data = outStream.toByteArray();//网页的二进制数据
            outStream.close();
            inStream.close();
            return data;
        }
    
    }

     4、SendInstantSms.xml文件如下,放在src目录下

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <qqCheckOnline xmlns="http://WebXml.com.cn/">
          <qqCode>qqCodeTmp</qqCode>
        </qqCheckOnline>
      </soap:Body>
    </soap:Envelope>

    ---------------------------------------------------------------------------------------

    Blog:http://www.cnblogs.com/linjiqin/
    J2EE、Android、Linux、Oracle QQ交流群:142463980、158560018(满)

    题外话:
    本人来自铁观音的发源地——泉州安溪,正宗安溪铁观音,有需要的友友欢迎加我Q:416501600。
    茶叶淘宝店:http://shop61968332.taobao.com/

  • 相关阅读:
    人生转折点:弃文从理
    人生第一站:大三暑假实习僧
    监听器启动顺序和java常见注解
    java常识和好玩的注释
    182. Duplicate Emails (Easy)
    181. Employees Earning More Than Their Managers (Easy)
    180. Consecutive Numbers (Medium)
    178. Rank Scores (Medium)
    177. Nth Highest Salary (Medium)
    176. Second Highest Salary(Easy)
  • 原文地址:https://www.cnblogs.com/linjiqin/p/2488880.html
Copyright © 2011-2022 走看看