上次已经给大家分享了简单的webservice的使用,提交给服务器的数据只是简单类型的数据,这次呢换成了xml,并通过一个小例子来讲解soap协议的使用。废话就不多说了先来说下xml数据的上传
1.代码的结构没有多大的变化,只需修改一下请求头就可以了,代码如下
//封装数据,数据以byte方式传输
byte[] b=xml.getBytes();
//需要请求的连接
URL url=new URL("http://192.168.87.1:8080/LoginService/LoginWebService");
//打开连接
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//设置请求方式和消息头以及超时时间
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
//设置是否允许对外输出数据
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(b.length));
//取得输出流
OutputStream outPut=conn.getOutputStream();
outPut.write(b);
outPut.flush();
outPut.close();
//判断请求是否成功
if(conn.getResponseCode()==200){
// Log.i();
return "OK";
}else{
return "Err";
}
下面给大家写了点服务器端获取byte数据的代码,顺便在控制台打印xml,这个方法建议写成工具类,我这里就不这样做了
request.setCharacterEncoding("UTF-8");
InputStream in=request.getInputStream();
byte[] b=new byte[1024];
int len=0;
int temp=0;
while((temp=in.read())!=-1){
b[len]=(byte)temp;
len++;
}
System.out.println(new String(b,"UTF-8"));
下面是运行效果图
后面的工作就是解析xml类似的工作了
2.HTTP协议的webservice差不多了下面就是使用soap协议请求webservice了,这里就来弄个手机号码归属地的webservice吧
先打开这个链接http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
看一下下面的soap协议这里就是用soap1.2就可以
3.下面就根据协议的说明来换掉请求头,为了开发方便我们需要把用于请求的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>$number</mobileCode>
<userID></userID>
</getMobileCodeInfo>
</soap12:Body>
</soap12:Envelope>
4.下面的工作就是替换占位符,请求该webservice
public String readSoapFile(InputStream input,String number) throws Exception{
byte[] b=new byte[1024];
int len=0;
int temp=0;
while((temp=input.read())!=-1){
b[len]=(byte)temp;
len++;
}
String soapxml=new String(b);
//替换xml文件的占位符
Map<String,String> map=new HashMap<String, String>();
map.put("number", number);
return replace(soapxml, map);
}
public String replace(String param,Map<String,String> params) throws Exception{
//拼凑占位符使用正则表达式替换之
String result=param;
if(params!=null&&!params.isEmpty()){
//拼凑占位符
for(Map.Entry<String,String> entry:params.entrySet()){
String name="\\$"+entry.getKey();
Pattern p=Pattern.compile(name);
Matcher m=p.matcher(result);
if(m.find()){
result=m.replaceAll(entry.getValue());
}
}
}
return result;
}
开始请求webservice并得到返回的xml字符串
public String soapService(InputStream input,String number) throws Exception{
String str="";
String soap=readSoapFile(input,number);
//封装数据,数据以byte方式传输
byte[] b=soap.getBytes();
//需要请求的连接
URL url=new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
//打开连接
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//设置请求方式和消息头以及超时时间
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
//设置是否允许对外输出数据
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
conn.setRequestProperty("Content-Length", String.valueOf(b.length));
//取得输出流
OutputStream outPut=conn.getOutputStream();
outPut.write(b);
outPut.flush();
outPut.close();
//判断请求是否成功
if(conn.getResponseCode()==200){
InputStream in=conn.getInputStream();
byte[] b1=new byte[1024];
int len=0;
int temp=0;
while((temp=in.read())!=-1){
b1[len]=(byte)temp;
len++;
}
str=new String(b1,"UTF-8");
}
return str;
}
下面来看下断点运行后的结果
我们能够看到webservice已经调用成功了,我们拿到了返回结果
下面我把测试类贴出来
UseHttpPost use=new UseHttpPost();
try {
InputStream in=this.getClass().getClassLoader().getResourceAsStream("soap.xml");
use.soapService(in, "13764928990");
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
分享到:
相关推荐
webservice 调用实例 解析xml文档。soap协议
以上就是Retrofit+Soap对webservice进行访问请求具体实现,该实现是通过String字符串的拼接,传输过程中转化为xml数据格式来实现的。
主要介绍了Java访问WebService返回XML数据的方法,涉及java操作WebService的相关技巧,需要的朋友可以参考下
本人测试能成功运行并输出结果。因为项目需要,在myeclipse中测试可行,在eclipse中也已测试。请放心使用。
soap教程,帮助你学习XML的web,service 的和网页交换数据的新方式
基于XML的SOAP_WebService分布式系统架构的研究和实现 基于XML的SOAP_WebService分布式系统架构的研究和实现 基于XML的SOAP_WebService分布式系统架构的研究和实现
类内部包含详细的解析 Xml 文件的 方法
终于调通安卓调用Webservice,传参并解析XML的样例,使用工具:Android Studio和Eclipse.Eclipse启动WebServer,Android Studio进行Application编码调试。两个工程文件都在压缩包中。喜极而泣。。。
使用webservice传输xml数据(重点掌握) 第二天: Jaxws的深入开发: 常用注解 测试jaxws传输复杂对象类型 CXF开发webservice: CXF入门程序 Spring+cxf整合(重点) CXF发布rest的webservice。(重点)...
NULL 博文链接:https://zw7534313.iteye.com/blog/2422138
InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("mobilesoap.xml"); try { addressView.setText(MobileInfoService.getMobileAddress(inStream, mobile)); } catch...
Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi=...
C#开发核心代码,用拼接XML方式,调用封装了实体类的SOAP接口
SOAP:XML跨平台Web Service开发技术
SOAP解析,与一般的xml解析不一样,他中间存在报文,解析到就出错了,也就解析不下去,这里举了一个列子,(网络上找了好久都没找到我想要的列子,最后我自己根据例子做了整理做出来的),把数据组合成集合。...
WebService传递大数据的实现:SOAP扩展,xml数据压缩 soapheader
Delphi通过WebService访问数据库. 1.查询数据 procedure TForm1.Button1Click(Sender: TObject); var ls_Table: string; ls_Service: Service1Soap; begin ls_Service := Buf_GetBuleService; ls_Table := '...
Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi=...
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容...