/** * 将Map对象转换为XML报文字符串 * * @param dataMap * @return */ public static String map2DatagramBody(Map<String, Object> dataMap) { StringBuffer sb = new StringBuffer(); Iterator<String> keys = dataMap.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); Object value = dataMap.get(key); if (CommonValidate.equals(key, "rows")) { List<Object> rows = (List<Object>) value; sb.append("<ROWS>"); for (int i = 0; i < rows.size(); i++) { Object obj = rows.get(i); sb.append("<LIST>"); sb.append(obj2Xml(obj)); sb.append("</LIST>"); } sb.append("</ROWS>"); } else { sb.append("<" + key + ">" + value + "</" + key + ">"); } } return sb.toString(); }
/** * 将XML格式报文转换成对象 * * <p> * <li>通过java反射对象,根据对象中的每个成员变量,获取对应报文的值 * <li>然后调用set方法,放入对象 * <li>如果里面有LIST,则获取LIST其中的内容,递归调用本方法获取对象 * * @param dgXml 待转换xml * @param clz 对象Class * @return obj对象 */ public static Object xml2Obj(String dgXml, Class clz) { Object obj = null; try { // 创建传出的对象 obj = clz.newInstance(); // 获取对象的成员变量 Field[] fields = clz.getDeclaredFields(); for (Field field : fields) { String fieldName = field.getName(); if (dgXml.indexOf("</" + fieldName + ">") != -1) { String value = getDatagramXmlValue(dgXml, fieldName); if (CommonValidate.equals(fieldName, "ROWS")) { List<Object> list = new ArrayList<Object>(); if (!CommonValidate.isEmpty(value)) { String className = clz.getName(); className = className + "ROWS"; do { Object valueObj = xml2Obj( value.substring( value.indexOf("<LIST>") + ("<LIST>").length(), value.indexOf("</LIST>")), Class.forName(className)); list.add(valueObj); value = value.substring(value.indexOf("</LIST>") + ("</LIST>").length()); } while (!CommonValidate.isEmpty(value)); } String methodName = "setROWS"; // 反射得到方法 Method m = clz.getDeclaredMethod(methodName, List.class); // 通过反射调用set方法 m.invoke(obj, list); } else { String methodName = "set" + DataTools.stringUpdateFirst(field.getName()); // 反射得到方法 Method m = clz.getDeclaredMethod(methodName, String.class); // 通过反射调用set方法 m.invoke(obj, value); } } } } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return obj; }