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>

 

https://www.cnblogs.com/linjiqin/archive/2012/05/07/2488880.html

 

发送彩信例子:

public String getSoapSmssendForMMs(String userid,String pass,String mobiles,String title,String content,String buffer,String mmsFileName)
    {
        try 
        {
            String soap = "";
			String FileName = mmsFileName.substring(mmsFileName.lastIndexOf("\\")+1,s.length())
            soap = "<?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>"
            		+"<SendMMS xmlns=\"http://tempuri.org/\">"
            		+"<uid>"+userid+"</uid>"
            		+"<pwd>"+pass+"</pwd>"
            		+"<mobno>"+mobiles+"</mobno>"
            		+"<title>"+title+"</title>"
            		+"<content>"+content+"</content>"
            		+"<Bytes>"+buffer+"</Bytes>"        
            		+"<mmsFileName>"+FileName+"</mmsFileName>" //文件名,不含路径 
            		+"</SendMMS>"
            		+"</soap:Body>"
            		+"</soap:Envelope>";                        
            return soap;
        } 
        catch (Exception ex)
        {
            ex.printStackTrace();
            return null;
        }
    }
	
	  
private InputStream getSoapInputStreamForMMs(String userid,String pass,String mobiles,String title,String content,String mmsFileName)throws Exception
    {
		URLConnection conn = null;
		InputStream is = null;
        try
        {        	
///////////////////////////////////////////////////////////////////////////////////////////			  
			  String   ret=new   String();   
			  File   f=new   File(mmsFileName);  //filename图片路径 
			  byte   buff[]=new   byte[(int)f.length()];     
				
			  InputStream   in   =   new   FileInputStream(f);   
			  in.read(buff);   
			  ret=new   sun.misc.BASE64Encoder().encode(buff);   //具体的编码方法   ret返回的字符串  
			  in.close();              
//////////////////////////////////////////////////////////////////////////////////////////////////////              
            String soap=getSoapSmssendForMMs(userid,pass,mobiles,title,content,ret,mmsFileName);            
            if(soap==null)
            {
                return null;
            }
            try{                  
            	URL url=new URL("http://service2.winic.org:8003/Service.asmx");     
            	
            	conn=url.openConnection();
            	conn.setUseCaches(false);
                conn.setDoInput(true);
                conn.setDoOutput(true);                           
                conn.setRequestProperty("Content-Length", Integer.toString(soap.length()));
                conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
                conn.setRequestProperty("HOST","service2.winic.org");
                conn.setRequestProperty("SOAPAction","\"http://tempuri.org/SendMMS\"");

                OutputStream os=conn.getOutputStream();
                OutputStreamWriter osw=new OutputStreamWriter(os,"utf-8");
                osw.write(soap);
                osw.flush();                
            }catch(Exception ex){
            	System.out.print("SmsSoap.openUrl error:"+ex.getMessage());
            }                                            
            try{
            	is=conn.getInputStream();            	
            }catch(Exception ex1){
            	System.out.print("SmsSoap.getUrl error:"+ex1.getMessage());
            }
            
            return is;   
        }
        catch(Exception e)
        {
        	System.out.print("SmsSoap.InputStream error:"+e.getMessage());
            return null;
        }
    }
	 	
	//发送彩信
	public String sendSMMs(String userid,String pass,String mobiles,String title,String content,String mmsFileName)
    {
        String result = "-12";
		try
        {
            Document doc;
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder db=dbf.newDocumentBuilder();
            InputStream is=getSoapInputStreamForMMs(userid,pass,mobiles,title,content,mmsFileName); //vfbtye1,
            if(is!=null){
	            doc=db.parse(is);
	            NodeList nl=doc.getElementsByTagName("SendMMSResult");
	            Node n=nl.item(0);
	            result=n.getFirstChild().getNodeValue();
	            is.close();
            }            	
            return result;
        }
        catch(Exception e)
        {
        	System.out.print("SmsSoap.sendSms error:"+e.getMessage());
            return "-12";
        }
    } 

 

 

 

 

猜你喜欢

转载自zgphacker2010.iteye.com/blog/2399742