【Java开源代码栏目提醒】:网学会员为广大网友收集整理了,XMLDatabinder.java,希望对大家有所帮助!
//$Id: XMLDatabinder.java,v 1.10.2.10 2003/11/02 04:26:44 oneovthafew Exp $
package net.sf.hibernate.xml;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.xml.transform.ErrorListener;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.
xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import net.sf.hibernate.Databinder;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.cfg.Environment;
import net.sf.hibernate.collection.CollectionPersister;
import net.sf.hibernate.collection.PersistentCollection;
import net.sf.hibernate.engine.SessionFactoryImplementor;
import net.sf.hibernate.persister.ClassPersister;
import net.sf.hibernate.proxy.HibernateProxy;
import net.sf.hibernate.proxy.HibernateProxyHelper;
import net.sf.hibernate.proxy.LazyInitializer;
import net.sf.hibernate.type.AbstractComponentType;
import net.sf.hibernate.type.BagType;
import net.sf.hibernate.type.ListType;
import net.sf.hibernate.type.MapType;
import net.sf.hibernate.type.PersistentCollectionType;
import net.sf.hibernate.type.SetType;
import net.sf.hibernate.type.StringType;
import net.sf.hibernate.type.Type;
import net.sf.hibernate.util.StringHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.DOMWriter;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
* Implementation of the API class Databinder. NOT threadsafe.
* @see Databinder
* @author Gavin King, Brad Clow
*/
public class XMLDatabinder implements Databinder {
private SessionFactoryImplementor factory;
private List objects = new ArrayList();
private Set associatedObjects;
private Set processedObjects;
private Transformer transform;
private boolean initializeLazy = false;
private static final Log log = LogFactory.getLog(XMLDatabinder.class);
public XMLDatabinder(SessionFactoryImplementor factory, Transformer transform) {
this.factory = factory;
this.transform = transform;
}
private ClassPersister getPersister(Class clazz) throws MappingException {
return factory.getPersister(clazz);
}
public void setInitializeLazy(boolean initializeLazy) {
this.initializeLazy = initializeLazy;
}
private Document toDocument() throws HibernateException {
this.associatedObjects = new HashSet();
this.processedObjects = new HashSet();
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("hibernate-generic");
root.setAttributeValue("datetime", Hibernate.TIMESTAMP.toString( new Date(), factory) );
Iterator iter;
// ke