通过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数据,就可以获得想要的数据了。

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>

其中,<ns:return>内的"xxx"可以是json数据,android只需解析标签<ns:return>里的json数据即可。

转载 http://www.juziku.com/wiki/3919.htm

通过HttpClient请求webService的更多相关文章

  1. jquery+ajax跨域请求webservice

    最近几天在学习webservice...在学习的时候便想到用ajax的方式去请求webservice.. 一直在测试..如果这个被请求的webservice和自己使用的是同一个端口号.则不用考虑那aj ...

  2. Node.js 使用 soap 模块请求 WebService 服务接口

    项目开发中需要请求webservice服务,前端主要使用node.js 作为运行环境,因此可以使用soap进行请求. 使用SOAP请求webservice服务的流程如下: 1.进入项目目录,安装 so ...

  3. httpclient请求方法

    /** * httpclient请求方法 * @param url 请求地址 * @param paramMap 请求参数 * @param ent 编码格式 gbk.utf-8 * @return ...

  4. JQuery请求WebService返回数据的几种处理方式

    打开自己的博客仔细浏览了一番,发现已经好久没有写博客了,由于最近一直比较忙碌懈怠了好多.默默反省三分钟.......言归正传,现在就对最近在学习webservice的过程中遇到的几种类型的问题中我的理 ...

  5. ajax请求webservice时抛出终止线程的异常

    请求webservice中以下接口,会抛出异常 {"Message":"正在中止线程.","StackTrace":" 在 Sys ...

  6. HttpClient请求服务器代码优化版

    HttpClient请求服务器代码优化版 首先,我在前面的两篇博文中介绍了在 Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换 ...

  7. C# 使用 HttpClient 调用 WebService 提示 NoSOAPAction

    问题 在自行构造 HttpClient 请求 SOAP 接口之后,返回 500 错误,并且提示 NoSOAPAction 信息. 原因 造成这个问题的主要原因是因为缺少了 SOAPAction 标头, ...

  8. webserive学习记录6-页面请求webservice

    前面都是通过JAVA代码访问webservice服务,下面将介绍通过javascript,jquery访问webservice服务并介绍过过servlet解决跨域问题的方法. 服务端 编写服务代码,解 ...

  9. C# HttpClient 请求认证、数据传输笔记

    目录 一,授权认证 二,请求类型 三,数据传输 C# HttpClient 请求认证.数据传输笔记 一,授权认证 客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 ...

随机推荐

  1. 智能家居入门DIY——【四、组合】

    前面几篇介绍了一些传感器和代码,这篇介绍一下把它们组合起来.之所以单独列出这部分,原因在于组合更多功能的时候发现使用软串口库驱动ESP8266时由于内存过小导致发送失败甚至整个系统无法工作的情况.所以 ...

  2. Javascript继承机制的设计思想

    转自:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.htm ...

  3. JavaScript(三) - 精简

    javascript 对象 1 什么是对象? 对象只是一种特殊的数据,对象拥有属性和方法. 2 对象有哪些? js中所有的事物都是对象:字符串,数值,数组,函数. js允许自定义对象.提供多个内建对象 ...

  4. java高并发总结-常用于面试复习

    定义: 独占锁是一种悲观保守的加锁策略,它避免了读/读冲突,如果某个只读线程获取锁,则其他读线程都只能等待,这种情况下就限制了不必要的并发性,因为读操作并不会影响数据的一致性. 共享锁则是一种乐观锁, ...

  5. Hadoop详细安装配置过程

    步骤一:基础环境搭建 1.下载并安装ubuntukylin-15.10-desktop-amd64.iso 2.安装ssh sudo apt-get install openssh-server op ...

  6. 好记性不如烂笔头--linux学习笔记9练手写个shell脚本

    #!/bin/bash #auto make install httpd #by authors baker95935 #httpd define path variable H_FILES=http ...

  7. 读书笔记--Linux Shell脚本攻略

    总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理到远程ssh等等,都给出来作者挑选 ...

  8. 什么是“堆”,"栈","堆栈","队列",它们的区别?

    堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树. 将根节点最大的堆叫做最大堆 ...

  9. c# 之Web.config

    Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式), 它可以出现在应用程序的每一个目录 ...

  10. LUA 删除元素的问题

    table在删除元素时要注意,例t = { "hello", "world", "!"}t[1] = nil此时print(#t) --输出 ...