通过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" > |
5 |
< sam:userName >sunlightcs</ sam:userName > |
其中:getUserInfo是方法名,userName是参数名,当然,还可以加多个参数。
下面的代码是向webService发送请求,获取数据,返回的数据是xml形式的,android只要解析xml数据,就可以获得想要的数据了。
01 |
import java.io.IOException; |
02 |
import java.io.OutputStream; |
03 |
import java.io.OutputStreamWriter; |
04 |
import java.io.Writer; |
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; |
15 |
public class ClientTest { |
17 |
public static void main(String[] args) { |
18 |
ClientTest.httpClientPost(); |
21 |
private static void httpClientPost() { |
22 |
HttpClient client = new DefaultHttpClient(); |
23 |
HttpPost post = new HttpPost( "http://localhost:8080/xxx/services/userService" ); |
26 |
ContentProducer cp = new ContentProducer() { |
27 |
public void writeTo(OutputStream outstream) throws IOException { |
28 |
Writer writer = new OutputStreamWriter(outstream, "UTF-8" ); |
33 |
String requestXml = getRequestXml(); |
34 |
writer.write(requestXml); |
39 |
post.setEntity( new EntityTemplate(cp)); |
40 |
HttpResponse response = client.execute(post); |
43 |
System.out.println(EntityUtils.toString(response.getEntity())); |
44 |
} catch (IOException e) { |
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>" ); |
返回的数据格式如下:
1 |
<? xml version = ‘1.0‘ encoding = ‘UTF-8‘ ?> |
2 |
< soapenv:Envelope xmlns:soapenv = "http://www.w3.org/2003/05/soap-envelope" > |
4 |
< ns:getUserInfoResponse xmlns:ns = "http://user.service.xxx.com" > |
5 |
< ns:return >xxx</ ns:return > |
6 |
</ ns:getUserInfoResponse > |
其中,<ns:return>内的"xxx"可以是json数据,android只需解析标签<ns:return>里的json数据即可。
通过HttpClient请求webService,古老的榕树,5-wow.com