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";
}
}