📄 xmlserializer.java
字号:
return serializeCustom(object, document); } public static Element serializeCustom(Object object, Document document) throws SerializeException { if (object instanceof Serializable) { byte[] objBytes = UtilObject.getBytes(object); if (objBytes == null) { throw new SerializeException("Unable to serialize object; null byte array returned"); } else { String byteHex = StringUtil.toHexString(objBytes); Element element = document.createElement("cus-obj"); element.appendChild(document.createCDATASection(byteHex)); return element; } } else { throw new SerializeException("Cannot serialize object of class " + object.getClass().getName()); } } public static Element makeElement(String elementName, Object value, Document document) { if (value == null) return document.createElement("null"); Element element = document.createElement(elementName); element.setAttribute("value", value.toString()); return element; } public static Object deserializeSingle(Element element, GenericDelegator delegator) throws SerializeException { String tagName = element.getTagName(); if (tagName.equals("null")) return null; if (tagName.startsWith("std-")) { // - Standard Objects - if ("std-String".equals(tagName)) { return element.getAttribute("value"); } else if ("std-Integer".equals(tagName)) { String valStr = element.getAttribute("value"); return Integer.valueOf(valStr); } else if ("std-Long".equals(tagName)) { String valStr = element.getAttribute("value"); return Long.valueOf(valStr); } else if ("std-Float".equals(tagName)) { String valStr = element.getAttribute("value"); return Float.valueOf(valStr); } else if ("std-Double".equals(tagName)) { String valStr = element.getAttribute("value"); return Double.valueOf(valStr); } else if ("std-Boolean".equals(tagName)) { String valStr = element.getAttribute("value"); return Boolean.valueOf(valStr); } else if ("std-Locale".equals(tagName)) { String valStr = element.getAttribute("value"); return UtilMisc.parseLocale(valStr); } else if ("std-Date".equals(tagName)) { String valStr = element.getAttribute("value"); DateFormat formatter = getDateFormat(); java.util.Date value = null; try { synchronized (formatter) { value = formatter.parse(valStr); } } catch (ParseException e) { throw new SerializeException("Could not parse date String: " + valStr, e); } return value; } } else if (tagName.startsWith("sql-")) { // - SQL Objects - if ("sql-Timestamp".equals(tagName)) { String valStr = element.getAttribute("value"); return java.sql.Timestamp.valueOf(valStr); } else if ("sql-Date".equals(tagName)) { String valStr = element.getAttribute("value"); return java.sql.Date.valueOf(valStr); } else if ("sql-Time".equals(tagName)) { String valStr = element.getAttribute("value"); return java.sql.Time.valueOf(valStr); } } else if (tagName.startsWith("col-")) { // - Collections - Collection value = null; if ("col-ArrayList".equals(tagName)) { value = new ArrayList(); } else if ("col-LinkedList".equals(tagName)) { value = new LinkedList(); } else if ("col-Stack".equals(tagName)) { value = new Stack(); } else if ("col-Vector".equals(tagName)) { value = new Vector(); } else if ("col-TreeSet".equals(tagName)) { value = new TreeSet(); } else if ("col-HashSet".equals(tagName)) { value = new HashSet(); } else if ("col-Collection".equals(tagName)) { value = new LinkedList(); } if (value == null) { return deserializeCustom(element); } else { Node curChild = element.getFirstChild(); while (curChild != null) { if (curChild.getNodeType() == Node.ELEMENT_NODE) { value.add(deserializeSingle((Element) curChild, delegator)); } curChild = curChild.getNextSibling(); } return value; } } else if (tagName.startsWith("map-")) { // - Maps - Map value = null; if ("map-HashMap".equals(tagName)) { value = new HashMap(); } else if ("map-Properties".equals(tagName)) { value = new Properties(); } else if ("map-Hashtable".equals(tagName)) { value = new Hashtable(); } else if ("map-WeakHashMap".equals(tagName)) { value = new WeakHashMap(); } else if ("map-TreeMap".equals(tagName)) { value = new TreeMap(); } else if ("map-Map".equals(tagName)) { value = new HashMap(); } if (value == null) { return deserializeCustom(element); } else { Node curChild = element.getFirstChild(); while (curChild != null) { if (curChild.getNodeType() == Node.ELEMENT_NODE) { Element curElement = (Element) curChild; if ("map-Entry".equals(curElement.getTagName())) { Element mapKeyElement = UtilXml.firstChildElement(curElement, "map-Key"); Element keyElement = null; Node tempNode = mapKeyElement.getFirstChild(); while (tempNode != null) { if (tempNode.getNodeType() == Node.ELEMENT_NODE) { keyElement = (Element) tempNode; break; } tempNode = tempNode.getNextSibling(); } if (keyElement == null) throw new SerializeException("Could not find an element under the map-Key"); Element mapValueElement = UtilXml.firstChildElement(curElement, "map-Value"); Element valueElement = null; tempNode = mapValueElement.getFirstChild(); while (tempNode != null) { if (tempNode.getNodeType() == Node.ELEMENT_NODE) { valueElement = (Element) tempNode; break; } tempNode = tempNode.getNextSibling(); } if (valueElement == null) throw new SerializeException("Could not find an element under the map-Value"); value.put(deserializeSingle(keyElement, delegator), deserializeSingle(valueElement, delegator)); } } curChild = curChild.getNextSibling(); } return value; } } else if (tagName.startsWith("eepk-")) { return delegator.makePK(element); } else if (tagName.startsWith("eeval-")) { return delegator.makeValue(element); } return deserializeCustom(element); } public static Object deserializeCustom(Element element) throws SerializeException { String tagName = element.getTagName(); if ("cus-obj".equals(tagName)) { String value = UtilXml.elementValue(element); if (value != null) { byte[] valueBytes = StringUtil.fromHexString(value); if (valueBytes != null) { Object obj = UtilObject.getObject(valueBytes); if (obj != null) { return obj; } } } throw new SerializeException("Problem deserializing object from byte array + " + element.getTagName()); } else { throw new SerializeException("Cannot deserialize element named " + element.getTagName()); } } /** * Returns the DateFormat used to serialize and deserialize <code>java.util.Date</code> objects. * This format is NOT used to format any of the java.sql subtypes of java.util.Date. * A <code>WeakReference</code> is used to maintain a reference to the DateFormat object * so that it can be created and garbage collected as needed. * * @return the DateFormat used to serialize and deserialize <code>java.util.Date</code> objects. */ private static DateFormat getDateFormat() { DateFormat formatter = null; if (simpleDateFormatter != null) { formatter = (DateFormat) simpleDateFormatter.get(); } if (formatter == null) { formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); simpleDateFormatter = new WeakReference(formatter); } return formatter; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -