/* * Copyright (C) 2004, 2005, 2006 Joe Walnes. * Copyright (C) 2006, 2007, 2008 XStream Committers. * All rights reserved. * * The software in this package is published under the terms of the BSD * style license a copy of which has been included with this distribution in * the LICENSE.txt file. * * Created on 08. March 2004 by Joe Walnes */ package com.thoughtworks.xstream.io.xml; import com.thoughtworks.xstream.core.util.XmlHeaderAwareReader; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.StreamException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.io.Writer; public class XppDriver extends AbstractXmlDriver { private static boolean xppLibraryPresent; public XppDriver() { super(new XmlFriendlyReplacer()); } /** * @since 1.2 */ public XppDriver(XmlFriendlyReplacer replacer) { super(replacer); } public HierarchicalStreamReader createReader(Reader xml) { loadLibrary(); return new XppReader(xml, xmlFriendlyReplacer()); } public HierarchicalStreamReader createReader(InputStream in) { try { return createReader(new XmlHeaderAwareReader(in)); } catch (UnsupportedEncodingException e) { throw new StreamException(e); } catch (IOException e) { throw new StreamException(e); } } private void loadLibrary() { if (!xppLibraryPresent) { try { Class.forName("org.xmlpull.mxp1.MXParser", false, getClass().getClassLoader()); } catch (ClassNotFoundException e) { throw new IllegalArgumentException("XPP3 pull parser library not present. Specify another driver." + " For example: new XStream(new DomDriver())"); } xppLibraryPresent = true; } } public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out, xmlFriendlyReplacer()); } public HierarchicalStreamWriter createWriter(OutputStream out) { return createWriter(new OutputStreamWriter(out)); } }