• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java 使用POST方式调用XML接口并使用dom4j返回的xml报文的CDATA数据

武飞扬头像
剑无涯和小木鱼
帮助1

        工作中涉及到调用ESB总线上的接口,接口的请求类型是application/xml,请求方法为POST,接口接收xml格式的报文,返回xml格式的报文。

        本文对Java使用POST方式调用XML接口并使用dom4j解析返回的xml报文,获取xml报文重要标签信息的方法做了介绍。

        首先是JAVA使用POST请求调用XML接口,这里使用了org-apache-commons-httpclient,需要在maven导入如下依赖:

  1.  
    <dependency>
  2.  
    <groupId>org.kie.modules</groupId>
  3.  
    <artifactId>org-apache-commons-httpclient</artifactId>
  4.  
    <version>6.2.0.CR2</version>
  5.  
    <type>pom</type>
  6.  
    </dependency>

        准备好xml接口的请求地址与请求报文,获取HttpClient对象与PostMethod对象,将请求地址与请求体传入PostMethod,并使用HttpClient去发送请求。其中报文体封装在RequestEntity对象中。

  1.  
    StringBuffer sb = new StringBuffer();
  2.  
    sb.append("请求报文");
  3.  
     
  4.  
    String data = sb.toString();
  5.  
    String url = "请求地址";
  6.  
    HttpClient httpclient = new HttpClient();
  7.  
    PostMethod post = new PostMethod(url);
  8.  
    String info = null;
  9.  
     
  10.  
    try{
  11.  
    RequestEntity entity = new StringRequestEntity(data, "text/xml",
  12.  
    "iso-8859-1");
  13.  
    post.setRequestEntity(entity);
  14.  
    httpclient.executeMethod(post);
  15.  
    int code = post.getStatusCode();
  16.  
     
  17.  
    if (code == HttpStatus.SC_OK)
  18.  
    info = new String(post.getResponseBodyAsString()); //接口返回的信息
  19.  
    } catch (Exception ex) {
  20.  
    ex.printStackTrace();
  21.  
    } finally {
  22.  
    post.releaseConnection();
  23.  
    }
学新通

            获取到返回的info报文信息,使用dom4j来解析其中的标签,dom4j的maven依赖如下:

  1.  
    <dependency>
  2.  
    <groupId>org.dom4j</groupId>
  3.  
    <artifactId>dom4j</artifactId>
  4.  
    <version>2.0.0</version>
  5.  
    </dependency>

        返回的报文结构如下:

  1.  
    <ESBRESP>
  2.  
    <HEADER>
  3.  
    <CODE>100</CODE>
  4.  
    <MSG>OK</MSG>
  5.  
    </HEADER>
  6.  
    <XMLDATA><![CDATA[<GET_PERIMAGE_RESP>
  7.  
    <HEADER>
  8.  
    <ROW_COUNT>1</ROW_COUNT>
  9.  
    </HEADER>
  10.  
     
  11.  
    <ITEMS>
  12.  
    <ITEM>
  13.  
    <STAFF_NO>0001</STAFF_NO>
  14.  
    <PHOTO>photoData</PHOTO>
  15.  
    </ITEM>
  16.  
    </ITEMS></GET_PERIMAGE_RESP>]]></XMLDATA>
  17.  
    </ESBRESP>
学新通

        如图,笔者要取得标签信息是PHOTO标签中的photoData,但是这个信息在CDATA里面。因此,解析步骤分为两步:

        1、解析整个xml报文,根据XMLDATA标签获取到CDATA的内容。

        2、把CDATA的内容当作另一个完整的xml报文,去获取其中的PHOTO标签。

        代码如下:

  1.  
    //获取XMLDATA中的数据
  2.  
    Document document = DocumentHelper.parseText(info);
  3.  
    Element cData = document.getRootElement().element("XMLDATA");
  4.  
     
  5.  
    //把XMLDATA的数据当作另一个xml文本去解析
  6.  
    Document document1 = DocumentHelper.parseText(cData.getText()); System.out.println(document1.getRootElement().element("ITEMS").element("ITEM").element("PHOTO").getText());

           整体还是非常简单的。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgccaga
系列文章
更多 icon
同类精品
更多 icon
继续加载