📄 xmlserializer.java
字号:
Element key = document.createElement("map-Key");
entryElement.appendChild(key);
key.appendChild(serializeSingle(entry.getKey(), document));
Element mapValue = document.createElement("map-Value");
entryElement.appendChild(mapValue);
mapValue.appendChild(serializeSingle(entry.getValue(), document));
}
return element;
}
return serializeCustom(object, document);
}
public static Element serializeCustom(Object object, Document document) throws SerializeException {
// TODO: if nothing else, try looking up a class for the type in the properties file, the class should implement an interface or have a certain static method on it
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 {
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 + -