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/

  • 相关阅读:
    iBatis.Net(4):DataMapper API
    【转】一步一步学Linq to sql(七):并发与事务
    【转】一步一步学Linq to sql(五):存储过程
    iBatis.Net(5):Data Map
    【转】一步一步学Linq to sql(三):增删改
    iBatis.Net(6):Data Map(深入)
    【转】一步一步学Linq to sql(四):查询句法
    【转】一步一步学Linq to sql(二):DataContext与实体
    .NET自动字符编码识别程序库 NChardet
    SQL UNIQUE Constraint
  • 原文地址:https://www.cnblogs.com/linjiqin/p/2488880.html
Copyright © 2011-2022 走看看