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