最近一个需求,数据需要从第三方系统拉取。查看客户文档,请求居然还是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;
}
}