Java 使用POST方式调用XML接口并使用dom4j返回的xml报文的CDATA数据
工作中涉及到调用ESB总线上的接口,接口的请求类型是application/xml,请求方法为POST,接口接收xml格式的报文,返回xml格式的报文。
本文对Java使用POST方式调用XML接口并使用dom4j解析返回的xml报文,获取xml报文重要标签信息的方法做了介绍。
首先是JAVA使用POST请求调用XML接口,这里使用了org-apache-commons-httpclient,需要在maven导入如下依赖:
-
<dependency>
-
<groupId>org.kie.modules</groupId>
-
<artifactId>org-apache-commons-httpclient</artifactId>
-
<version>6.2.0.CR2</version>
-
<type>pom</type>
-
</dependency>
准备好xml接口的请求地址与请求报文,获取HttpClient对象与PostMethod对象,将请求地址与请求体传入PostMethod,并使用HttpClient去发送请求。其中报文体封装在RequestEntity对象中。
-
StringBuffer sb = new StringBuffer();
-
sb.append("请求报文");
-
-
String data = sb.toString();
-
String url = "请求地址";
-
HttpClient httpclient = new HttpClient();
-
PostMethod post = new PostMethod(url);
-
String info = null;
-
-
try{
-
RequestEntity entity = new StringRequestEntity(data, "text/xml",
-
"iso-8859-1");
-
post.setRequestEntity(entity);
-
httpclient.executeMethod(post);
-
int code = post.getStatusCode();
-
-
if (code == HttpStatus.SC_OK)
-
info = new String(post.getResponseBodyAsString()); //接口返回的信息
-
} catch (Exception ex) {
-
ex.printStackTrace();
-
} finally {
-
post.releaseConnection();
-
}
获取到返回的info报文信息,使用dom4j来解析其中的标签,dom4j的maven依赖如下:
-
<dependency>
-
<groupId>org.dom4j</groupId>
-
<artifactId>dom4j</artifactId>
-
<version>2.0.0</version>
-
</dependency>
返回的报文结构如下:
-
<ESBRESP>
-
<HEADER>
-
<CODE>100</CODE>
-
<MSG>OK</MSG>
-
</HEADER>
-
<XMLDATA><![CDATA[<GET_PERIMAGE_RESP>
-
<HEADER>
-
<ROW_COUNT>1</ROW_COUNT>
-
</HEADER>
-
-
<ITEMS>
-
<ITEM>
-
<STAFF_NO>0001</STAFF_NO>
-
<PHOTO>photoData</PHOTO>
-
</ITEM>
-
</ITEMS></GET_PERIMAGE_RESP>]]></XMLDATA>
-
</ESBRESP>
如图,笔者要取得标签信息是PHOTO标签中的photoData,但是这个信息在CDATA里面。因此,解析步骤分为两步:
1、解析整个xml报文,根据XMLDATA标签获取到CDATA的内容。
2、把CDATA的内容当作另一个完整的xml报文,去获取其中的PHOTO标签。
代码如下:
-
//获取XMLDATA中的数据
-
Document document = DocumentHelper.parseText(info);
-
Element cData = document.getRootElement().element("XMLDATA");
-
-
//把XMLDATA的数据当作另一个xml文本去解析
-
Document document1 = DocumentHelper.parseText(cData.getText()); System.out.println(document1.getRootElement().element("ITEMS").element("ITEM").element("PHOTO").getText());
整体还是非常简单的。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgccaga
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01