From: <hib...@li...> - 2006-03-07 21:58:32
|
Author: epbernard Date: 2006-03-07 16:58:29 -0500 (Tue, 07 Mar 2006) New Revision: 9570 Added: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java Log: DTDEntityResolver that solve the orm xsd Added: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java 2006-03-07 21:12:50 UTC (rev 9569) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java 2006-03-07 21:58:29 UTC (rev 9570) @@ -0,0 +1,49 @@ +//$Id: $ +package org.hibernate.cfg; + +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.util.DTDEntityResolver; +import org.xml.sax.InputSource; +import org.xml.sax.EntityResolver; + +/** + * @author Emmanuel Bernard + */ +public class EJB3DTDEntityResolver extends DTDEntityResolver { + public static final EntityResolver INSTANCE = new EJB3DTDEntityResolver(); + + private static final Log log = LogFactory.getLog( DTDEntityResolver.class ); + + private static final String EJB3ORM_NAMESPACE = "http://java.sun.com/xml/ns/persistence/orm"; + + public InputSource resolveEntity(String publicId, String systemId) { + InputSource is = super.resolveEntity( publicId, systemId ); + if (is == null) { + if ( systemId != null ) { + if ( systemId.endsWith( "orm_1_0.xsd" ) ) { + log.debug( "recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/" ); + String path = "org/hibernate/ejb/" + "orm_1_0.xsd"; + InputStream dtdStream = resolveInHibernateNamespace( path ); + if ( dtdStream == null ) { + log.debug( "unable to locate [" + systemId + "] on classpath" ); + } + else { + log.debug( "located [" + systemId + "] in classpath" ); + InputSource source = new InputSource( dtdStream ); + source.setPublicId( publicId ); + source.setSystemId( systemId ); + return source; + } + } + } + } + else { + return is; + } + //use the default behavior + return null; + } +} |