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