if (logger.isDebugEnabled ()) {
logger.debug
("Convering item " + name + " from JDOM to SAX");
}
SAXOutputter outputter = new SAXOutputter();
SAXEventBufferImpl b = new SAXEventBufferImpl ();
outputter.setContentHandler(b);
outputter.setLexicalHandler(b);
if (v instanceof Document) {
outputter.output ((Document)v);
} else {
List l;
if (v instanceof List) {
l = (List)v;
} else {
l = new ArrayList ();
l.add (v);
}
outputter.output (l);
}
b.pack();
v = b;
newValues.put (name, v);
} catch (JDOMException e) {
logger.error (e.getMessage (), e);
throw new InvalidDataException (e.getMessage ());
}
} else if ((v instanceof org.w3c.dom.Element)
|| (v instanceof org.w3c.dom.DocumentFragment)
|| (v instanceof org.w3c.dom.Document)) {
try {
if (logger.isDebugEnabled ()) {
logger.debug
("Convering item " + name + " from W3C DOM to SAX");
}
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer ();
SAXEventBufferImpl b = new SAXEventBufferImpl ();
// There seems to be a bug in Xalan that causes it to
// fire two endDocument events when transforming a
// DocumentFragment, filter it out.
t.transform (new DOMSource ((org.w3c.dom.Node)v),
new SAXResult(new DupEndFilter(b)));
b.pack();
v = b;
newValues.put (name, v);
} catch (TransformerConfigurationException e) {
String s = "Error converting DOM to SAX: "+e.getMessage ();
logger.error (s, e);