You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.9 KiB
78 lines
1.9 KiB
11 years ago
|
package de.timroes.axmlrpc.serializer;
|
||
|
|
||
|
import de.timroes.axmlrpc.XMLRPCException;
|
||
|
import de.timroes.axmlrpc.XMLRPCRuntimeException;
|
||
|
import de.timroes.axmlrpc.XMLUtil;
|
||
|
import de.timroes.axmlrpc.xmlcreator.XmlElement;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
import org.w3c.dom.Element;
|
||
|
import org.w3c.dom.Node;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author Tim Roes
|
||
|
*/
|
||
|
public class ArraySerializer implements Serializer {
|
||
|
|
||
|
private static final String ARRAY_DATA = "data";
|
||
|
private static final String ARRAY_VALUE = "value";
|
||
|
|
||
|
public Object deserialize(Element content) throws XMLRPCException {
|
||
|
|
||
|
List<Object> list = new ArrayList<Object>();
|
||
|
|
||
|
Element data = XMLUtil.getOnlyChildElement(content.getChildNodes());
|
||
|
|
||
|
if(!ARRAY_DATA.equals(data.getNodeName())) {
|
||
|
throw new XMLRPCException("The array must contain one data tag.");
|
||
|
}
|
||
|
|
||
|
// Deserialize every array element
|
||
|
Node value;
|
||
|
for(int i = 0; i < data.getChildNodes().getLength(); i++) {
|
||
|
|
||
|
value = data.getChildNodes().item(i);
|
||
|
|
||
|
// Strip only whitespace text elements and comments
|
||
|
if(value == null || (value.getNodeType() == Node.TEXT_NODE
|
||
|
&& value.getNodeValue().trim().length() <= 0)
|
||
|
|| value.getNodeType() == Node.COMMENT_NODE)
|
||
|
continue;
|
||
|
|
||
|
if(value.getNodeType() != Node.ELEMENT_NODE) {
|
||
|
throw new XMLRPCException("Wrong element inside of array.");
|
||
|
}
|
||
|
|
||
|
list.add(SerializerHandler.getDefault().deserialize((Element)value));
|
||
|
|
||
|
}
|
||
|
|
||
|
return list.toArray();
|
||
|
}
|
||
|
|
||
|
public XmlElement serialize(Object object) {
|
||
|
|
||
|
Iterable<?> iter = (Iterable<?>)object;
|
||
|
XmlElement array = new XmlElement(SerializerHandler.TYPE_ARRAY);
|
||
|
XmlElement data = new XmlElement(ARRAY_DATA);
|
||
|
array.addChildren(data);
|
||
|
|
||
|
try {
|
||
|
|
||
|
XmlElement e;
|
||
|
for(Object obj : iter) {
|
||
|
e = new XmlElement(ARRAY_VALUE);
|
||
|
e.addChildren(SerializerHandler.getDefault().serialize(obj));
|
||
|
data.addChildren(e);
|
||
|
}
|
||
|
|
||
|
} catch(XMLRPCException ex) {
|
||
|
throw new XMLRPCRuntimeException(ex);
|
||
|
}
|
||
|
|
||
|
return array;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|