您的位置:首页 > 编程语言 > Java开发

dom4j解析xml文档

2016-02-17 09:00 417 查看
public ReturnValue grMessageUnserializable(String strRequest,String grPublicKey){
if (strRequest.length() > MAX_RQ_LENGTH) {
return ReturnValue.getInstance(9999, "报文过大!");
}
List<IBaseMessage> messagelist = new ArrayList<IBaseMessage>();
try {
boolean validFlag = XmlDigitalSignatureVerifier
.isXmlDigitalSignatureValid(strRequest,
RuntimeParameter.GRPUBLICKEY);
if (validFlag == false) {
return ReturnValue.getInstance(1014, "数字签名验证错误");
}
Document document = DocumentHelper.parseText(strRequest);
Element root = document.getRootElement();
// 如果根节点不是Elianda,返回错误
if (false == root.getName().equals("Elianda")) {
// 无效的根节点
return ReturnValue.getInstance(1017, "无效的根节点");
}
List<Element> elementList = root.elements();
// 平台是否支持多个Message列表
for (Element subElementsBak : elementList) {
String subElementsBakName = subElementsBak.getName();
if (subElementsBakName.equals("Signature")) {
continue;
}
if (subElementsBakName.equals("Message") == false) {
return ReturnValue.getInstance(1018, "包含不正确的Message域");
}
CPlatfromExchangeMessage requestMsg = new CPlatfromExchangeMessage();
// commonSignature报文中的数字签名,localSignature此方法中生成的签名
List<Element> subElementList = subElementsBak.elements();
for (Element subElements : subElementList) {
String content = subElements.getName();
requestMsg.setMsgid(content);
// 对数据进行签名
List<Element> subContentElements = subElements.elements();
// 循环处理msgid的值,放入请求数据中
for (Element elementsList : subContentElements) {
String fieldName = elementsList.getName();
String fieldText = elementsList.getTextTrim();
// 对MSReq报文smsList进行处理
if (fieldName == "smsList") {
List<Sms> listSms = new ArrayList<Sms>();
// 循环向集合中赋值
// 得到sms节点
List<Element> smsElementList = elementsList
.elements(); 
for (Element smsmentsList : smsElementList) {
List<Element> sunSmsElementList = smsmentsList
.elements();
Sms sms = requestMsg.createASms();
for (Element sunSmsmentsList : sunSmsElementList) {
String smsName = sunSmsmentsList.getName();
String smsContent = sunSmsmentsList
.getTextTrim();
// 1、向sms类中赋值
Field field = sms.getClass()
.getDeclaredField(smsName);
field.setAccessible(true);
field.set(sms, smsContent);// 动态设置值
}
// 2、向集合中add
listSms.add(sms);
}
// 3、向requestMsg中set集合
requestMsg.setListSms(listSms);
}
// 获取fieldName在CPlatfromExchangeMessage pojo中的实体类字段
Field field = requestMsg.getClass().getDeclaredField(
fieldName);
field.setAccessible(true);
field.set(requestMsg, fieldText);// 动态设置值
}
}
messagelist.add(requestMsg);
}
if(messagelist.size() > 1){
return ReturnValue.getInstance(9001, "平台暂时不支持多条请求,请联系对方系统负责人");
}
if(messagelist.isEmpty()){

return ReturnValue.getInstance(9002, "请求的报文为空");
}
return ReturnValue.getInstance(messagelist.get(0), 0);
} catch (Exception e) {
e.printStackTrace();
return ReturnValue.getInstance(1019, "内容错误");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java