Java使用SOAP获取webservice实例解析

来源:互联网 发布:一淘网跟淘宝网 编辑:程序博客网 时间:2024/05/21 04:23

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>

0 0
原创粉丝点击