01: package org.compass.core.xml.dom4j.converter;
02:
03: import java.io.Reader;
04:
05: import org.compass.core.CompassException;
06: import org.compass.core.config.CompassConfigurable;
07: import org.compass.core.config.CompassEnvironment;
08: import org.compass.core.config.CompassSettings;
09: import org.compass.core.converter.ConversionException;
10: import org.compass.core.converter.xsem.SupportsXmlContentWrapper;
11: import org.compass.core.xml.AliasedXmlObject;
12: import org.compass.core.xml.dom4j.Dom4jAliasedXmlObject;
13: import org.dom4j.Document;
14: import org.dom4j.DocumentException;
15: import org.dom4j.io.SAXReader;
16:
17: /**
18: * A dom4j xml content mapping converter, which uses dom4j <code>SAXReader</code> to
19: * convert the xml string into a {@link org.compass.core.xml.dom4j.Dom4jAliasedXmlObject}.
20: *
21: * @author kimchy
22: */
23: public class SAXReaderXmlContentConverter extends
24: AbstractXmlWriterXmlContentConverter implements
25: SupportsXmlContentWrapper, CompassConfigurable {
26:
27: private SAXReader saxReader;
28:
29: public void configure(CompassSettings settings)
30: throws CompassException {
31: saxReader = doCreateSAXReader(settings);
32: }
33:
34: protected SAXReader doCreateSAXReader(CompassSettings settings) {
35: return new SAXReader();
36: }
37:
38: /**
39: * This converter does not support a singleton wrapper strategy.
40: */
41: public boolean supports(String wrapper) {
42: return !CompassEnvironment.Converter.XmlContent.WRAPPER_SINGLETON
43: .equals(wrapper);
44: }
45:
46: /**
47: * Uses dom4j <code>SAXReader</code> to convert the given xml string into a {@link org.compass.core.xml.dom4j.Dom4jAliasedXmlObject}.
48: *
49: * @param alias The alias that will be associated with the {@link org.compass.core.xml.AliasedXmlObject}
50: * @param xml The xml string to convert into an {@link org.compass.core.xml.dom4j.Dom4jAliasedXmlObject}
51: * @return A {@link org.compass.core.xml.dom4j.Dom4jAliasedXmlObject} parsed from the given xml string and associated with the given alias
52: * @throws org.compass.core.converter.ConversionException
53: * In case the xml parsing failed
54: */
55: public AliasedXmlObject fromXml(String alias, Reader xml)
56: throws ConversionException {
57: Document doc;
58: try {
59: doc = saxReader.read(xml);
60: } catch (DocumentException e) {
61: throw new ConversionException("Failed to parse alias["
62: + alias + "] xml[" + xml + "]", e);
63: }
64: return new Dom4jAliasedXmlObject(alias, doc.getRootElement());
65: }
66: }
|