运用了反射,将model中的属性一一获得出来。
相应的xml标签需要视情况修改
public static String convertToXml(Object inParamObject) throws BaseException {
Class<?> superClass = null;// 超类
Class<?> childClass = null;// 子类
String returnXML = null;
Object objectElementList = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder docBuilder = factory.newDocumentBuilder();
Document xmlDocument = docBuilder.newDocument();
xmlDocument.setXmlStandalone(true);// 设置生成的XML文档的头部信息中不包含Standalone
// **************************ROOT元素,Start*************************************/
Element root = xmlDocument.createElement("ROOT");
// **************************HEADER元素,Start*************************************/
Element header = xmlDocument.createElement("HEADER");
superClass = inParamObject.getClass().getSuperclass();// 得到父类
Field[] superField = superClass.getDeclaredFields();// 获取实体类的所有属性,返回Field数组
for (int j = 0; j < superField.length; j++) {
// 获取当前元素
Element element = StandardConvertHelper.getElement(xmlDocument, superClass, superField[j],
inParamObject);
header.appendChild(element);
}
root.appendChild(header);
// **************************HEADER元素,End*************************************/
// **************************BODY元素,Start*************************************/
// BODY元素节点
Element body = xmlDocument.createElement("BODY");
// 获得输入对象中的List对象元素, 若输入对象中只有一个元素,而且是List(默认是List)
Field[] inParamFields = inParamObject.getClass().getDeclaredFields();
if (inParamFields.length > 0 && inParamFields[0].getType() == List.class) {
Field field = inParamObject.getClass().getField("list");
objectElementList = field.get(inParamObject);
}
if (objectElementList instanceof List) {
// 组装body - 包含多个实体
List<?> objectList = (List<?>) objectElementList;// 将输入的Object对象强制转换成List对象
for (int i = 0; i < objectList.size(); i++) {
Object childObject = objectList.get(i);
childClass = objectList.get(i).getClass();
Field[] field = childClass.getDeclaredFields();// 获取实体类的所有属性,返回Field数组
// **************************ITEM元素,Start*************************************/
if (field == null || field.length == 0) {
continue;
}
Element itemElement = xmlDocument.createElement("ITEM");
for (int j = 0; j < field.length; j++) {
// 获取当前元素
Element element = StandardConvertHelper.getElement(xmlDocument, childClass, field[j],
childObject);
itemElement.appendChild(element);
}
body.appendChild(itemElement);
// **************************ITEM元素,END*************************************/
}
} else {// 若输入对象是普通javabean
// 组装body
childClass = inParamObject.getClass();
Field[] field = childClass.getDeclaredFields();
for (int j = 0; j < field.length; j++) {
// 获取当前元素
Element element = StandardConvertHelper.getElement(xmlDocument, childClass, field[j],
inParamObject);
body.appendChild(element);
}
}
root.appendChild(body);
// **************************BODY元素,END*************************************/
xmlDocument.appendChild(root);
// **************************ROOT元素,END*************************************/
// 开始转换
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(xmlDocument);
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.INDENT, "no");
StringWriter strWtr = new StringWriter();
StreamResult result = new StreamResult(strWtr);
transformer.transform(source, result);
returnXML = result.getWriter().toString();
} catch (Exception e) {
throw new AppException("Model生成XML错误!", e);
}
return returnXML;
}
private static Element getElement(Document xmlDocument, Class<?> sourceClass, Field field, Object inParamObject)
throws BaseException {
String name = field.getName();// 获取属性的名字
String value = null;
Element element = xmlDocument.createElement(name);
Method fieldMethod = null;
try {
fieldMethod = sourceClass.getMethod("get" + name);
value = (String) fieldMethod.invoke(inParamObject);
element.appendChild(xmlDocument.createTextNode(StringUtils.isEmpty(value) ? "" : value));
} catch (Exception e) {
throw new AppException("Model生成XML错误!", e);
}
return element;
}