001 /*******************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved.
003 * ---------------------------------------------------------------------------
004 * The software in this package is published under the terms of the BSD style
005 * license a copy of which has been included with this distribution in the
006 * LICENSE.txt file.
007 ******************************************************************************/
008 package org.picocontainer.script.xml;
009
010 import org.picocontainer.PicoContainer;
011 import org.w3c.dom.Element;
012
013 import com.thoughtworks.xstream.XStream;
014 import com.thoughtworks.xstream.io.xml.DomDriver;
015 import com.thoughtworks.xstream.io.xml.DomReader;
016
017 /**
018 * Implementation of XMLComponentInstanceFactory that uses XStream to unmarshal
019 * DOM elements.
020 *
021 * @author Paul Hammant
022 * @author Marcos Tarruella
023 * @author Mauro Talevi
024 */
025 public class XStreamComponentInstanceFactory implements XMLComponentInstanceFactory {
026 /** The XStream used to unmarshal the DOM element */
027 private final XStream xstream;
028
029 /**
030 * Creates an XStreamComponentInstanceFactory with the default instance of
031 * XStream
032 */
033 public XStreamComponentInstanceFactory() {
034 this(new XStream(new DomDriver()));
035 }
036
037 /**
038 * Creates an XStreamComponentInstanceFactory for a given instance of
039 * XStream
040 *
041 * @param xstream the XStream instance
042 */
043 public XStreamComponentInstanceFactory(XStream xstream) {
044 this.xstream = xstream;
045 }
046
047 public Object makeInstance(PicoContainer pico, Element element, ClassLoader classLoader) {
048 return xstream.unmarshal(new DomReader(element));
049 }
050 }