手把手教你SOAP访问webservice并DOM解析返回的XML数据(转)
http://blog.csdn.net/u012534831/article/details/51357111
前言:
目前我们项目组还在采用webservice这种http方式,并且某些网站服务提供的对外接口还在采用webservice方式,因此就总结了一下写了这篇文章。
以soap1.2的请求为例,在例子里我们传进去用户名和密码给服务,服务返回一个xml数据。
首先我们来开一下soap1.2的request,
//wsdl,例:OrderApp.asmx
POST /******App.asmx HTTP/1.1
//这儿填写服务地址
Host: 100.100.100.100
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length <?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>
<Login xmlns="我的项目">
<UserName>string</UserName>
<PassWord>string</PassWord>
</Login>
</soap12:Body>
</soap12:Envelope>
接下来,我们在代码里拼接请求体:
/**
* arg1为第一个参数键,arg2为第一个参数值,arg3为第二个参数键,arg4为第二个参数值,
*method为方法名,xmlns为命名空间 */
public void initSoap(String arg1,String arg2,String arg3,String arg4,String method,String xmlns) {
String soapRequestData = "<?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>"
+ "<"+method+""+"xmlns="+"\""+xmlns+"\""
// + " <Login xmlns=\"我的项目\">"
+ "<"+arg1+">"+arg2+"</"+arg1+">"
+ "<"+arg3+">"+arg4+"</"+arg3+">"
// + " <UserName>"+"YQPIS0670"+"</UserName>"
// + " <PassWord>"+"YQPIS0670"+"</PassWord>"
+ " </Login>"
+ "</soap12:Body>"
+ " </soap12:Envelope>";
}
第二步,开启线程并执行访问
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
PostMethod postMethod = new PostMethod(
"服务地址,即上面request中的host+端口号+post");
// 然后把Soap请求数据添加到PostMethod中
byte[] b = null;
try {
b = soapRequestData.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
InputStream is = new ByteArrayInputStream(b, , b.length);
RequestEntity re = new InputStreamRequestEntity(is,
b.length, "application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(re);
// 最后生成一个HttpClient对象,并发出postMethod请求
HttpClient httpClient = new HttpClient();
try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == ) {
Log.d("soapRequestData", "调用成功!");
StringBuffer buffer = new StringBuffer();
// 解析器 工厂类
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//返回流式数据
InputStream soapResponseData = postMethod
.getResponseBodyAsStream();
Document dm = db.parse(soapResponseData);
// element和node是同一概念
// 不同的是element提供更多方法
if (dm.getElementsByTagName("Root").item()
.getFirstChild() != null) {
// j是Root即根节点下面节点个数
for (int j = ; j < dm .getElementsByTagName("Root").item()
.getChildNodes().getLength(); j++) {
String result3 = dm.getElementsByTagName("Root") .item().getChildNodes().item(j).getTextContent();
buffer.append(result3);
}
}
} else {
Log.d("soapRequestData", "调用失败!错误码:" + statusCode);
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
大家可以看下我的xml数据:
<Root>
<Result>1</Result>
<Message>登录成功</Message>
<MemberIDCard>YQPIS0670</MemberIDCard>
<UserName>祁宏涛</UserName>
<Birthday>2010-11-04</Birthday>
<Photo>...</Photo>
<Telephone/>
<MemberState>当前会员</MemberState>
<MemberStatus>友情会籍</MemberStatus>
<MemberSex>12ee640d-a037-497e-966e-91fc2186c8b4</MemberSex>
<Nationality>175f0624-29d1-4b88-9d97-d72ebb1e6a1c</Nationality>
<MemberSexMemo>男</MemberSexMemo>
<NationalityMemo>中国</NationalityMemo>
</Root>
如果有多层节点,可以自己修改dm.getElementsByTagName(“Root”) .item(0).getChildNodes().item(j).getTextContent()
为dm.getElementsByTagName(“Root”) .item(0).getChildNodes().item(j).getChildNodes().item(k).getTextContent();即为3层节点的属性值。
手把手教你SOAP访问webservice并DOM解析返回的XML数据(转)的更多相关文章
- WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据
Webservice传递的数据只能是序列化的数据,典型的就是xml数据. /// <summary> /// 通过用户名和密码 返回下行数据 /// & ...
- 使用dom解析器对xml文档内容进行增删查改
直接添代码: XML文档名称(one.xml) <?xml version="1.0" encoding="UTF-8" standalone=" ...
- jQuery提交Json数据到Webservice,并接收返回的Json数据
jQuery ajax webservice:get 和 post 一.GET 方式 客户端 复制代码 代码如下: var data = { classCode: "0001"}; ...
- DOM解析,取得XML文件里面的信息
1 创建解析器工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 2 解析器工厂对象创建解析器对象 Do ...
- VB调用WebService(SOA2.0接口)(直接Post方式)并解析返回的XML
SOA 2.0接口 Function GetDepartmentCode(reqDeptCode) Dim soaRequestXML : soaRequestXML = "" D ...
- XML解析-Dom4j的DOM解析方式更新XML
Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...
- Java DOM解析器 - 修改XML文档
这是我们需要修改的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8&q ...
- Java DOM解析器 - 查询XML文档
这是需要我们查询的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0"?> ...
- Android使用webService(发送xml数据的方式,不使用jar包)
Android使用webService可以用ksoap2.jar包来使用.但是我觉得代码不好理解,而且记不住. 所以我查询了好多资料,以及自己的理解.可以用代码发送http请求(发送xml数据)来访问 ...
随机推荐
- Spring 核心之IOC 容器
核心概念: IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现. DI(Dependency Inje ...
- java 责任链接模式
- pyqt5--QTDesigner--安装与配置
安装: 安装PyQt5-tools 文件--->设置---> ---> 安装之后在 安装目录\Lib\site-packages\pyqt5_tools 找到 designer.e ...
- shell练习--PAT试题1009:说反话 (20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...
- layui table 改
F.prototype.pullData = function(e) { success: function (t) { var da001 = i; window.getdata1234567(da ...
- 使用WireMock伪造REST服务
在真正的rest api服务还没有写好之前,为了方便前端测试调用,后端可以写个服务,伪造rest服务(写假数据) 1.官网: http://wiremock.org/ 下载可执行jar:http:// ...
- Linux培训教程 linux中nl命令使用介绍
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...
- mac 下 git log 退出方法
英文状态下按 Q (大小写无论)即可.
- 【2019个推开发者节】亿级日活APP都在用的个推SDK, 现在全部免费!
1024程序员节来了 双11近了 各路满减.折扣.领券.秒杀.集赞 营销玩法猛于虎,一看优惠两毛五 日常拼命赶"需求" 修"Bug"的开发者们 想找个好用又不贵 ...
- 2018-2019-2 网络对抗技术 20165220 Exp 9 Web安全基础
2018-2019-2 网络对抗技术 20165220 Exp 9 Web安全基础 实验任务 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF) ...