All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.internal.util.xml.XMLHelper Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
Show newest version
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.internal.util.xml;

import java.security.AccessController;
import java.security.PrivilegedAction;

import org.dom4j.DocumentFactory;
import org.dom4j.io.SAXReader;
import org.xml.sax.EntityResolver;

/**
 * Small helper class that lazy loads DOM and SAX reader and keep them for fast use afterwards.
 *
 * @deprecated Currently only used for integration with HCANN.  The rest of Hibernate uses StAX now
 * for XML processing.  See {@link org.hibernate.boot.jaxb.internal.stax}
 */
@Deprecated
public final class XMLHelper {
	private final DocumentFactory documentFactory;

	public XMLHelper() {
		PrivilegedAction action = new PrivilegedAction() {
			public DocumentFactory run() {
				final ClassLoader originalTccl = Thread.currentThread().getContextClassLoader();
				try {
					// We need to make sure we get DocumentFactory
					// loaded from the same ClassLoader that loads
					// Hibernate classes, to make sure we get the
					// proper version of DocumentFactory, This class
					// is "internal", and should only be used for XML
					// files generated by Envers.

					// Using the (Hibernate) ClassLoader that loads
					// this Class will avoid collisions in the case
					// that DocumentFactory can be loaded from,
					// for example, the application ClassLoader.
					Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
					return DocumentFactory.getInstance();
				}
				finally {
					Thread.currentThread().setContextClassLoader( originalTccl );
				}
			}
		};

		this.documentFactory = System.getSecurityManager() != null
				? AccessController.doPrivileged( action )
				: action.run();
	}

	public DocumentFactory getDocumentFactory() {
		return documentFactory;
	}

	public SAXReader createSAXReader(ErrorLogger errorLogger, EntityResolver entityResolver) {
		SAXReader saxReader = new SAXReader();
		saxReader.setMergeAdjacentText( true );
		saxReader.setValidation( true );
		saxReader.setErrorHandler( errorLogger );
		saxReader.setEntityResolver( entityResolver );

		return saxReader;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy