通过HttpClient请求webService
由于服务端是用webService开发的,android要调用webService服务获取数据,这里采用的是通过HttpClient发送post请求,获取webService数据。
服务端使用的webService框架是axis2,请求数据之前,要封装一个xml格式,再通过post请求,获取服务端数据。
请求的xml格式如下所示:
1 |
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"xmlns:sam="http://user.service.xxx.com">
|
2 |
<soap:Header/>
|
3 |
<soap:Body>
|
4 |
<sam:getUserInfo>
|
5 |
<sam:userName>sunlightcs</sam:userName>
|
6 |
</sam:getUserInfo>
|
7 |
</soap:Body>
|
8 |
</soap:Envelope>
|
其中:getUserInfo是方法名,userName是参数名,当然,还可以加多个参数。
下面的代码是向webService发送请求,获取数据,返回的数据是xml形式的,android只要解析xml数据,就可以获得想要的数据了。
返回的数据格式如下:
其中,<ns:return>内的"xxx"可以是json数据,android只需解析标签<ns:return>里的json数据即可。
01 |
import java.io.IOException;
|
02 |
import java.io.OutputStream;
|
03 |
import java.io.OutputStreamWriter;
|
04 |
import java.io.Writer;
|
05 |
06 |
import org.apache.http.HttpResponse;
|
07 |
import org.apache.http.client.HttpClient;
|
08 |
import org.apache.http.client.methods.HttpPost;
|
09 |
import org.apache.http.entity.ContentProducer;
|
10 |
import org.apache.http.entity.EntityTemplate;
|
11 |
import org.apache.http.impl.client.DefaultHttpClient;
|
12 |
import org.apache.http.util.EntityUtils;
|
13 |
14 |
15 |
public class ClientTest {
|
16 |
17 |
public static void main(String[] args) {
|
18 |
ClientTest.httpClientPost();
|
19 |
}
|
20 |
|
21 |
private static void httpClientPost() {
|
22 |
HttpClient client = new DefaultHttpClient();
|
23 |
HttpPost post = newHttpPost("http://localhost:8080/xxx/services/userService");
|
24 |
|
25 |
try {
|
26 |
ContentProducer cp = new ContentProducer() {
|
27 |
public void writeTo(OutputStream outstream) throwsIOException {
|
28 |
Writer writer = new OutputStreamWriter(outstream,"UTF-8");
|
29 |
|
30 |
/**
|
31 |
* 获取请求的xml格式数据
|
32 |
*/
|
33 |
String requestXml = getRequestXml();
|
34 |
writer.write(requestXml);
|
35 |
writer.flush();
|
36 |
}
|
37 |
};
|
38 |
39 |
post.setEntity(new EntityTemplate(cp));
|
40 |
HttpResponse response = client.execute(post);
|
41 |
|
42 |
//打印返回的xml数据
|
43 |
System.out.println(EntityUtils.toString(response.getEntity()));
|
44 |
} catch (IOException e) {
|
45 |
e.printStackTrace();
|
46 |
}
|
47 |
}
|
48 |
|
49 |
|
50 |
private static String getRequestXml(){
|
51 |
StringBuilder sb = new StringBuilder("<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:sam=\"http://user.service.xxx.com\">");
|
52 |
sb.append("<soap:Header/>");
|
53 |
sb.append("<soap:Body>");
|
54 |
sb.append("<sam:getUserInfo>");
|
55 |
sb.append("<sam:userName>sunlightcs</sam:userName>");
|
56 |
sb.append("</sam:getUserInfo>");
|
57 |
sb.append("</soap:Body>");
|
58 |
sb.append("</soap:Envelope>");
|
59 |
|
60 |
return sb.toString();
|
61 |
}
|
62 |
63 |
} |
返回的数据格式如下:
1 |
<?xml version='1.0' encoding='UTF-8'?>
|
2 |
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
|
3 |
<soapenv:Body>
|
4 |
<ns:getUserInfoResponse xmlns:ns="http://user.service.xxx.com">
|
5 |
<ns:return>xxx</ns:return>
|
6 |
</ns:getUserInfoResponse>
|
7 |
</soapenv:Body>
|
8 |
</soapenv:Envelope>
|
转载 http://www.juziku.com/wiki/3919.htm