xml的请求与组装

最近一个需求,数据需要从第三方系统拉取。查看客户文档,请求居然还是xml的……于是想到了用dom4j去实现。(如有不正确处,欢迎大家指正)
一 bean类(分别做为请求及返回值)
public class ReleaseParms {
private String name;
private String sex;
private String age;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSex() {
    return sex;
}

public void setSex(String sex) {
    this.sex = sex;
}

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}

}

public class QueryReleaseInfo {
private String address;
private String job;
private String tel;

public String getaddress() {
    return address;
}

public QueryReleaseInfo() {
}

public QueryReleaseInfo(String address, String job, String tel) {
    this.address = address;
    this.job = job;
    this.tel = tel;
}

public void setaddress(String address) {
    this.address = address;

}

public String getJob() {
    return job;
}

public void setJob(String job) {
    this.job = job;
}

public String getTel() {
    return tel;
}

public void setTel(String tel) {
    this.tel = tel;
}

}

二.组装与解析xml
public class QueryReleaseInfoServiceImpl implements QueryreleaseInfoServie {
Logger log = LoggerFactory.getLogger(QueryReleaseInfoServiceImpl.class);

public Map queryReleaseDetail(ReleaseParms parms) {
    String xml = beanToXml(parms);
    //调用第三方接口
    String result = queryReleaseInfo(xml);
    log.info("queryReleaseInfo()=============>"+result);
    if (result == null) {
        return null;
    }
    Document document = null;
    Map<String,Object> map = new HashMap();
    try {
        document = DocumentHelper.parseText(result);
        Element rootElement = document.getRootElement();
        //对于xml节点中有Qname形式的,忽略前缀进行解析(当初在这个坑中爬了好久,手动滑稽……)
        Iterator<Element> it = rootElement.elementIterator();
        QueryReleaseInfo releaseInfo = analysis(it);
        map.put("releaseInfo",releaseInfo);
    } catch (DocumentException e) {
        log.error(e.getMessage());
    }
    return map;
}

/**
 * 组装请求的xml
 *
 * @param releaseParms
 * @return
 */
private String beanToXml(ReleaseParms releaseParms) {
    Document document = DocumentHelper.createDocument();
    Element root = DocumentHelper.createElement("student");
    document.setRootElement(root);
    //设置命名空间
    root.addNamespace("xmlns", "context= http://www.springframework.org/schema/context");

    Element genderNode = root.addElement("sex");
    //添加节点值
    genderNode.setText(releaseParms.getSex());
    Element nameNode = root.addElement("name");
    nameNode.setText(releaseParms.getName());
    Element ageNode = root.addElement("age");
    ageNode.setText(releaseParms.getAge());
    String xml = document.asXML();
    return xml;

}

/**
 * 解析请求的xml
 *
 * @return
 */
private QueryReleaseInfo analysis(Iterator it) {
    QueryReleaseInfo queryReleaseInfo = new QueryReleaseInfo();
    while (it.hasNext()) {
        Element e = (Element) it.next();
        queryReleaseInfo.setaddress(e.attributeValue("address"));
        queryReleaseInfo.setJob(e.attributeValue("job"));
        queryReleaseInfo.setTel(e.attributeValue("tel"));

    }
    return queryReleaseInfo;
}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值