/** * 将对象转换为XML报文字符串 * * <p> * <li>通过java反射对象,将对象的每一个成员变量都转换成xml的标签 * <li>然后将获取每个变量的值,放入标签之间 * * @param obj 待转换对象 * @return xml字符串 */ public static String obj2Xml(Object obj) { StringBuffer sb = new StringBuffer(); try { Class clz = obj.getClass(); Field[] fields = clz.getDeclaredFields(); for (Field field : fields) { String fieldName = field.getName(); sb.append("<" + fieldName + ">"); String methodName = "get" + DataTools.stringUpdateFirst(field.getName()); // 反射得到方法 Method m = clz.getDeclaredMethod(methodName); // 通过反射调用set方法 sb.append(m.invoke(obj)); sb.append("</" + fieldName + ">"); } } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } 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; }