调用webservice

来源:互联网 发布:微小宝mac版 编辑:程序博客网 时间:2024/05/03 20:00
利用webservice查询手机号码归属地实现方法:Android客户端可以通过在Http的基础上使用SOAP调用webservice服务器上的API第一步:在src下新建一个xml文件.(1)从网站http://WebXml.com.cn/找到需要的API(2)把从网上拷贝的API即soap协议粘贴进刚才新建的xml文件(3)注意:在xml中使用占位符$mobile来代替还未输入的手机号码soap.xml文件如下:<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">  <soap12:Body>    <getMobileCodeInfo xmlns="http://WebXml.com.cn/">      <mobileCode>$mobile</mobileCode>      <userID></userID>    </getMobileCodeInfo>  </soap12:Body></soap12:Envelope>第二步:发送和解析SOAP协议注意:(1)在读取soap.xml文件后,要将其中的占位符替换成需要查询的手机号码.   因为$是正则表达式的特殊字符所以需要用\转义,但是\也是Java中的特殊字符所以还要对\进转义.于是为\\$mobile(2)传递给parseSOAP(InputStream xml)方法的参数是conn的输入流即parseSOAP(conn.getInputStream());发送SOAP协议:public class MobileService {public static String getAddress(String mobile) throws Exception {InputStream inStream = MobileService.class.getClassLoader().getResourceAsStream("soap.xml");byte[] data = StreamTool.read(inStream);//read(inStream)方法见下String content = new String(data, "UTF-8");String soap = content.replaceAll("\\$mobile", mobile);//替换占位符,形成真正的soap协议byte[] entity = soap.getBytes();String path = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("POST");conn.setDoOutput(true);conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");conn.setRequestProperty("Content-Length", String.valueOf(entity.length));OutputStream outStream = conn.getOutputStream();outStream.write(entity);if(conn.getResponseCode() == 200){return parseSOAP(conn.getInputStream());//参数为输入流}return null;}webservice服务器返回的soap协议如下:<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"                  xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">  <soap12:Body>    <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">      <getMobileCodeInfoResult>string</getMobileCodeInfoResult>    </getMobileCodeInfoResponse>  </soap12:Body></soap12:Envelope>注意:(1)<getMobileCodeInfoResult>string</getMobileCodeInfoResult>中的String是我们正需要得到的(2)主要是利用XmlPullParser解析XML文件解析SOAP协议:private static String parseSOAP(InputStream xml) throws Exception{XmlPullParser parser = Xml.newPullParser();parser.setInput(xml, "UTF-8");int event = parser.getEventType();while(event != XmlPullParser.END_DOCUMENT){switch (event) {case XmlPullParser.START_TAG:if("getMobileCodeInfoResult".equals(parser.getName())){return parser.nextText();}break;}event = parser.next();}return null;}}//read(inStream)方法:public class StreamTool {public static byte[] read(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);}outStream.close();inStream.close();return outStream.toByteArray();}}

原创粉丝点击