HHH-7981 - Load (now) locally defined orm.xsd while processing orm.xml files

This commit is contained in:
Steve Ebersole 2013-03-20 22:02:39 -05:00
parent fbdca39506
commit 467daa22b0
13 changed files with 1862 additions and 1790 deletions

View File

@ -84,7 +84,7 @@ task jaxb {
// input schemas // input schemas
cfgXsd = file( 'src/main/resources/org/hibernate/hibernate-configuration-4.0.xsd') cfgXsd = file( 'src/main/resources/org/hibernate/hibernate-configuration-4.0.xsd')
hbmXsd = file( 'src/main/resources/org/hibernate/hibernate-mapping-4.0.xsd' ) hbmXsd = file( 'src/main/resources/org/hibernate/hibernate-mapping-4.0.xsd' )
ormXsd = file( 'src/main/resources/org/hibernate/ejb/orm_2_0.xsd' ) ormXsd = file( 'src/main/resources/org/hibernate/jpa/orm_2_0.xsd' )
// input bindings // input bindings
cfgXjb = file( 'src/main/xjb/hbm-configuration-bindings.xjb' ) cfgXjb = file( 'src/main/xjb/hbm-configuration-bindings.xjb' )

View File

@ -56,37 +56,57 @@ public class EJB3DTDEntityResolver extends DTDEntityResolver {
@Override @Override
public InputSource resolveEntity(String publicId, String systemId) { public InputSource resolveEntity(String publicId, String systemId) {
LOG.tracev( "Resolving XML entity {0} : {1}", publicId, systemId ); LOG.tracev( "Resolving XML entity {0} : {1}", publicId, systemId );
InputSource is = super.resolveEntity( publicId, systemId ); if ( systemId != null ) {
if ( is == null ) { if ( systemId.endsWith( "orm_2_1.xsd" ) ) {
if ( systemId != null ) { InputStream dtdStream = getStreamFromClasspath( "orm_2_1.xsd" );
if ( systemId.endsWith( "orm_1_0.xsd" ) ) { final InputSource source = buildInputSource( publicId, systemId, dtdStream, false );
InputStream dtdStream = getStreamFromClasspath( "orm_1_0.xsd" ); if ( source != null ) {
final InputSource source = buildInputSource( publicId, systemId, dtdStream, false ); return source;
if (source != null) return source;
} }
else if ( systemId.endsWith( "orm_2_0.xsd" ) ) { }
InputStream dtdStream = getStreamFromClasspath( "orm_2_0.xsd" ); else if ( systemId.endsWith( "orm_2_0.xsd" ) ) {
final InputSource source = buildInputSource( publicId, systemId, dtdStream, false ); InputStream dtdStream = getStreamFromClasspath( "orm_2_0.xsd" );
if (source != null) return source; final InputSource source = buildInputSource( publicId, systemId, dtdStream, false );
if ( source != null ) {
return source;
} }
else if ( systemId.endsWith( "persistence_1_0.xsd" ) ) { }
InputStream dtdStream = getStreamFromClasspath( "persistence_1_0.xsd" ); else if ( systemId.endsWith( "orm_1_0.xsd" ) ) {
final InputSource source = buildInputSource( publicId, systemId, dtdStream, true ); InputStream dtdStream = getStreamFromClasspath( "orm_1_0.xsd" );
if (source != null) return source; final InputSource source = buildInputSource( publicId, systemId, dtdStream, false );
if ( source != null ) {
return source;
} }
else if ( systemId.endsWith( "persistence_2_0.xsd" ) ) { }
InputStream dtdStream = getStreamFromClasspath( "persistence_2_0.xsd" ); else if ( systemId.endsWith( "persistence_2_1.xsd" ) ) {
final InputSource source = buildInputSource( publicId, systemId, dtdStream, true ); InputStream dtdStream = getStreamFromClasspath( "persistence_2_1.xsd" );
if (source != null) return source; final InputSource source = buildInputSource( publicId, systemId, dtdStream, true );
if ( source != null ) {
return source;
}
}
else if ( systemId.endsWith( "persistence_2_0.xsd" ) ) {
InputStream dtdStream = getStreamFromClasspath( "persistence_2_0.xsd" );
final InputSource source = buildInputSource( publicId, systemId, dtdStream, true );
if ( source != null ) {
return source;
}
}
else if ( systemId.endsWith( "persistence_1_0.xsd" ) ) {
InputStream dtdStream = getStreamFromClasspath( "persistence_1_0.xsd" );
final InputSource source = buildInputSource( publicId, systemId, dtdStream, true );
if ( source != null ) {
return source;
} }
} }
} }
else {
// because the old code did this too (in terms of setting resolved)
InputSource source = super.resolveEntity( publicId, systemId );
if ( source != null ) {
resolved = true; resolved = true;
return is;
} }
//use the default behavior return source;
return null;
} }
private InputSource buildInputSource(String publicId, String systemId, InputStream dtdStream, boolean resolved) { private InputSource buildInputSource(String publicId, String systemId, InputStream dtdStream, boolean resolved) {
@ -103,8 +123,8 @@ public class EJB3DTDEntityResolver extends DTDEntityResolver {
} }
private InputStream getStreamFromClasspath(String fileName) { private InputStream getStreamFromClasspath(String fileName) {
LOG.trace( "Recognized JPA ORM namespace; attempting to resolve on classpath under org/hibernate/ejb" ); LOG.trace( "Recognized JPA ORM namespace; attempting to resolve on classpath under org/hibernate/jpa" );
String path = "org/hibernate/ejb/" + fileName; String path = "org/hibernate/jpa/" + fileName;
InputStream dtdStream = resolveInHibernateNamespace( path ); InputStream dtdStream = resolveInHibernateNamespace( path );
return dtdStream; return dtdStream;
} }

View File

@ -58,9 +58,7 @@ public class ErrorLogger implements ErrorHandler, Serializable {
this.file = file; this.file = file;
} }
/** @Override
* {@inheritDoc}
*/
public void error(SAXParseException error) { public void error(SAXParseException error) {
if ( this.errors == null ) { if ( this.errors == null ) {
errors = new ArrayList<SAXParseException>(); errors = new ArrayList<SAXParseException>();
@ -68,23 +66,16 @@ public class ErrorLogger implements ErrorHandler, Serializable {
errors.add( error ); errors.add( error );
} }
/** @Override
* {@inheritDoc}
*/
public void fatalError(SAXParseException error) { public void fatalError(SAXParseException error) {
error( error ); error( error );
} }
/** @Override
* {@inheritDoc}
*/
public void warning(SAXParseException warn) { public void warning(SAXParseException warn) {
LOG.parsingXmlWarning( warn.getLineNumber(), warn.getMessage() ); LOG.parsingXmlWarning( warn.getLineNumber(), warn.getMessage() );
} }
/**
* @return returns a list of encountered xml parsing errors, or the empty list if there was no error
*/
public List<SAXParseException> getErrors() { public List<SAXParseException> getErrors() {
return errors; return errors;
} }

View File

@ -23,17 +23,30 @@
*/ */
package org.hibernate.internal.util.xml; package org.hibernate.internal.util.xml;
import java.io.StringReader; import javax.xml.XMLConstants;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.dom.DOMDocumentFactory;
import org.dom4j.io.SAXReader; import org.dom4j.io.SAXReader;
import org.jboss.logging.Logger;
import org.xml.sax.EntityResolver; import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.jboss.logging.Logger;
import org.hibernate.InvalidMappingException; import org.hibernate.InvalidMappingException;
import org.hibernate.MappingException;
import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.ConfigHelper;
/** /**
* Handles reading mapping documents, both {@code hbm} and {@code orm} varieties. * Handles reading mapping documents, both {@code hbm} and {@code orm} varieties.
@ -42,11 +55,13 @@ import org.hibernate.internal.CoreMessageLogger;
*/ */
public class MappingReader { public class MappingReader {
private static final CoreMessageLogger LOG = Logger.getMessageLogger( private static final CoreMessageLogger log = Logger.getMessageLogger(
CoreMessageLogger.class, CoreMessageLogger.class,
MappingReader.class.getName() MappingReader.class.getName()
); );
public static final String ASSUMED_ORM_XSD_VERSION = "2.1";
public static final MappingReader INSTANCE = new MappingReader(); public static final MappingReader INSTANCE = new MappingReader();
/** /**
@ -59,70 +74,70 @@ public class MappingReader {
private MappingReader() { private MappingReader() {
} }
public XmlDocument readMappingDocument(EntityResolver entityResolver, InputSource source, Origin origin) { // public XmlDocument readMappingDocument(EntityResolver entityResolver, InputSource source, Origin origin) {
// IMPL NOTE : this is the legacy logic as pulled from the old AnnotationConfiguration code // // IMPL NOTE : this is the legacy logic as pulled from the old AnnotationConfiguration code
//
Exception failure; // Exception failure;
ErrorLogger errorHandler = new ErrorLogger(); // ErrorLogger errorHandler = new ErrorLogger();
//
SAXReader saxReader = new SAXReader(); // SAXReader saxReader = new SAXReader();
saxReader.setEntityResolver( entityResolver ); // saxReader.setEntityResolver( entityResolver );
saxReader.setErrorHandler( errorHandler ); // saxReader.setErrorHandler( errorHandler );
saxReader.setMergeAdjacentText( true ); // saxReader.setMergeAdjacentText( true );
saxReader.setValidation( true ); // saxReader.setValidation( true );
//
Document document = null; // Document document = null;
try { // try {
// first try with orm 2.0 xsd validation // // first try with orm 2.0 xsd validation
setValidationFor( saxReader, "orm_2_0.xsd" ); // setValidationFor( saxReader, "orm_2_0.xsd" );
document = saxReader.read( source ); // document = saxReader.read( source );
if ( errorHandler.hasErrors() ) { // if ( errorHandler.hasErrors() ) {
throw errorHandler.getErrors().get( 0 ); // throw errorHandler.getErrors().get( 0 );
} // }
return new XmlDocumentImpl( document, origin.getType(), origin.getName() ); // return new XmlDocumentImpl( document, origin.getType(), origin.getName() );
} // }
catch ( Exception orm2Problem ) { // catch ( Exception orm2Problem ) {
if ( LOG.isDebugEnabled() ) { // if ( LOG.isDebugEnabled() ) {
LOG.debugf( "Problem parsing XML using orm 2 xsd : %s", orm2Problem.getMessage() ); // LOG.debugf( "Problem parsing XML using orm 2 xsd : %s", orm2Problem.getMessage() );
} // }
failure = orm2Problem; // failure = orm2Problem;
errorHandler.reset(); // errorHandler.reset();
//
if ( document != null ) { // if ( document != null ) {
// next try with orm 1.0 xsd validation // // next try with orm 1.0 xsd validation
try { // try {
setValidationFor( saxReader, "orm_1_0.xsd" ); // setValidationFor( saxReader, "orm_1_0.xsd" );
document = saxReader.read( new StringReader( document.asXML() ) ); // document = saxReader.read( new StringReader( document.asXML() ) );
if ( errorHandler.hasErrors() ) { // if ( errorHandler.hasErrors() ) {
errorHandler.logErrors(); // errorHandler.logErrors();
throw errorHandler.getErrors().get( 0 ); // throw errorHandler.getErrors().get( 0 );
} // }
return new XmlDocumentImpl( document, origin.getType(), origin.getName() ); // return new XmlDocumentImpl( document, origin.getType(), origin.getName() );
} // }
catch ( Exception orm1Problem ) { // catch ( Exception orm1Problem ) {
if ( LOG.isDebugEnabled() ) { // if ( LOG.isDebugEnabled() ) {
LOG.debugf( "Problem parsing XML using orm 1 xsd : %s", orm1Problem.getMessage() ); // LOG.debugf( "Problem parsing XML using orm 1 xsd : %s", orm1Problem.getMessage() );
} // }
} // }
} // }
} // }
throw new InvalidMappingException( "Unable to read XML", origin.getType(), origin.getName(), failure ); // throw new InvalidMappingException( "Unable to read XML", origin.getType(), origin.getName(), failure );
} // }
//
private void setValidationFor(SAXReader saxReader, String xsd) { // private void setValidationFor(SAXReader saxReader, String xsd) {
try { // try {
saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true ); // saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
//saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true ); // //saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true );
//set the default schema locators // //set the default schema locators
saxReader.setProperty( // saxReader.setProperty(
"http://apache.org/xml/properties/schema/external-schemaLocation", // "http://apache.org/xml/properties/schema/external-schemaLocation",
"http://java.sun.com/xml/ns/persistence/orm " + xsd // "http://java.sun.com/xml/ns/persistence/orm " + xsd
); // );
} // }
catch ( SAXException e ) { // catch ( SAXException e ) {
saxReader.setValidation( false ); // saxReader.setValidation( false );
} // }
} // }
// this is the version of the code I'd like to use, but it unfortunately works very differently between // this is the version of the code I'd like to use, but it unfortunately works very differently between
// JDK 1.5 ad JDK 1.6. On 1.5 the vaildation "passes" even with invalid content. // JDK 1.5 ad JDK 1.6. On 1.5 the vaildation "passes" even with invalid content.
@ -132,134 +147,131 @@ public class MappingReader {
// 2) Document the issue on 1.5 and how to fix (specifying alternate SchemaFactory instance) // 2) Document the issue on 1.5 and how to fix (specifying alternate SchemaFactory instance)
// 3) Use a specific JAXP library (Xerces2, Saxon, Jing, MSV) and its SchemaFactory instance directly // 3) Use a specific JAXP library (Xerces2, Saxon, Jing, MSV) and its SchemaFactory instance directly
// public XmlDocument readMappingDocument(EntityResolver entityResolver, InputSource source, Origin origin) { public XmlDocument readMappingDocument(EntityResolver entityResolver, InputSource source, Origin origin) {
// ErrorLogger errorHandler = new ErrorLogger(); ErrorLogger errorHandler = new ErrorLogger();
//
// SAXReader saxReader = new SAXReader( new DOMDocumentFactory() ); SAXReader saxReader = new SAXReader( new DOMDocumentFactory() );
// saxReader.setEntityResolver( entityResolver ); saxReader.setEntityResolver( entityResolver );
// saxReader.setErrorHandler( errorHandler ); saxReader.setErrorHandler( errorHandler );
// saxReader.setMergeAdjacentText( true ); saxReader.setMergeAdjacentText( true );
//
// Document documentTree = null; Document documentTree;
//
// // IMPL NOTE : here we enable DTD validation in case the mapping is a HBM file. This will validate // IMPL NOTE : here we enable DTD validation in case the mapping is a HBM file. This will validate
// // the document as it is parsed. This is needed because the DTD defines default values that have to be // the document as it is parsed. This is needed because the DTD defines default values that have to be
// // applied as the document is parsed, so thats something we need to account for as we (if we) transition // applied as the document is parsed, so thats something we need to account for as we (if we) transition
// // to XSD. // to XSD.
// saxReader.setValidation( true ); saxReader.setValidation( true );
// try { try {
// documentTree = saxReader.read( source ); documentTree = saxReader.read( source );
// } }
// catch ( DocumentException e ) { catch ( DocumentException e ) {
// // we had issues reading the input, most likely malformed document or validation error against DTD // we had issues reading the input, most likely malformed document or validation error against DTD
// throw new InvalidMappingException( "Unable to read XML", origin.getType(), origin.getName(), e ); throw new InvalidMappingException( "Unable to read XML", origin.getType(), origin.getName(), e );
// } }
//
// Element rootElement = documentTree.getRootElement(); Element rootElement = documentTree.getRootElement();
// if ( rootElement == null ) { if ( rootElement == null ) {
// throw new InvalidMappingException( "No root element", origin.getType(), origin.getName() ); throw new InvalidMappingException( "No root element", origin.getType(), origin.getName() );
// } }
//
// if ( "entity-mappings".equals( rootElement.getName() ) ) { if ( "entity-mappings".equals( rootElement.getName() ) ) {
// final String explicitVersion = rootElement.attributeValue( "version" ); final String explicitVersion = rootElement.attributeValue( "version" );
// final String xsdVersionString = explicitVersion == null ? ASSUMED_ORM_XSD_VERSION : explicitVersion; final String xsdVersionString = explicitVersion == null ? ASSUMED_ORM_XSD_VERSION : explicitVersion;
// final SupportedOrmXsdVersion xsdVersion = SupportedOrmXsdVersion.parse( xsdVersionString ); final SupportedOrmXsdVersion xsdVersion = SupportedOrmXsdVersion.parse( xsdVersionString, origin );
// final Schema schema = xsdVersion == SupportedOrmXsdVersion.ORM_1_0 ? orm1Schema() : orm2Schema(); final Schema schema = xsdVersion.getSchema();
// try { try {
// schema.newValidator().validate( new DOMSource( (org.w3c.dom.Document) documentTree ) ); schema.newValidator().validate( new DOMSource( (org.w3c.dom.Document) documentTree ) );
// } }
// catch ( SAXException e ) { catch ( SAXException e ) {
// throw new InvalidMappingException( "Validation problem", origin.getType(), origin.getName(), e ); throw new InvalidMappingException( "Validation problem", origin.getType(), origin.getName(), e );
// } }
// catch ( IOException e ) { catch ( IOException e ) {
// throw new InvalidMappingException( "Validation problem", origin.getType(), origin.getName(), e ); throw new InvalidMappingException( "Validation problem", origin.getType(), origin.getName(), e );
// } }
// } }
// else { else {
// if ( errorHandler.getError() != null ) { if ( errorHandler.hasErrors() ) {
// throw new InvalidMappingException( errorHandler.logErrors();
// "Error validating hibernate-mapping against DTD", errorHandler.reset();
// origin.getType(), throw new InvalidMappingException(
// origin.getName(), "Error validating hibernate-mapping against DTD; see logs for details",
// errorHandler.getError() origin.getType(),
// ); origin.getName()
// } );
// } }
// }
// return new XmlDocumentImpl( documentTree, origin );
// } return new XmlDocumentImpl( documentTree, origin );
// }
// public static enum SupportedOrmXsdVersion {
// ORM_1_0, public static enum SupportedOrmXsdVersion {
// ORM_2_0; ORM_1_0( "org/hibernate/jpa/orm_1_0.xsd" ),
// ORM_2_0( "org/hibernate/jpa/orm_2_0.xsd"),
// public static SupportedOrmXsdVersion parse(String name) { ORM_2_1( "org/hibernate/jpa/orm_2_1.xsd");
// if ( "1.0".equals( name ) ) {
// return ORM_1_0; private final String schemaResourceName;
// } private Schema schema;
// else if ( "2.0".equals( name ) ) {
// return ORM_2_0; private SupportedOrmXsdVersion(String schemaResourceName) {
// } this.schemaResourceName = schemaResourceName;
// throw new IllegalArgumentException( "Unsupported orm.xml XSD version encountered [" + name + "]" ); }
// }
// } public static SupportedOrmXsdVersion parse(String name, Origin origin) {
// if ( "1.0".equals( name ) ) {
// return ORM_1_0;
// public static final String ORM_1_SCHEMA_NAME = "org/hibernate/ejb/orm_1_0.xsd"; }
// public static final String ORM_2_SCHEMA_NAME = "org/hibernate/ejb/orm_2_0.xsd"; else if ( "2.0".equals( name ) ) {
// return ORM_2_0;
// private static Schema orm1Schema; }
// else if ( "2.1".equals( name ) ) {
// private static Schema orm1Schema() { return ORM_2_1;
// if ( orm1Schema == null ) { }
// orm1Schema = resolveLocalSchema( ORM_1_SCHEMA_NAME ); throw new UnsupportedOrmXsdVersionException( name, origin );
// } }
// return orm1Schema;
// } public Schema getSchema() {
// if ( schema == null ) {
// private static Schema orm2Schema; schema = resolveLocalSchema( schemaResourceName );
// }
// private static Schema orm2Schema() { return schema;
// if ( orm2Schema == null ) { }
// orm2Schema = resolveLocalSchema( ORM_2_SCHEMA_NAME ); }
// }
// return orm2Schema; private static Schema resolveLocalSchema(String schemaName) {
// } return resolveLocalSchema( schemaName, XMLConstants.W3C_XML_SCHEMA_NS_URI );
// }
// private static Schema resolveLocalSchema(String schemaName) {
// return resolveLocalSchema( schemaName, XMLConstants.W3C_XML_SCHEMA_NS_URI ); private static Schema resolveLocalSchema(String schemaName, String schemaLanguage) {
// } URL url = ConfigHelper.findAsResource( schemaName );
// if ( url == null ) {
// private static Schema resolveLocalSchema(String schemaName, String schemaLanguage) { throw new MappingException( "Unable to locate schema [" + schemaName + "] via classpath" );
// URL url = ConfigHelper.findAsResource( schemaName ); }
// if ( url == null ) { try {
// throw new MappingException( "Unable to locate schema [" + schemaName + "] via classpath" ); InputStream schemaStream = url.openStream();
// } try {
// try { StreamSource source = new StreamSource(url.openStream());
// InputStream schemaStream = url.openStream(); SchemaFactory schemaFactory = SchemaFactory.newInstance( schemaLanguage );
// try { return schemaFactory.newSchema(source);
// StreamSource source = new StreamSource(url.openStream()); }
// SchemaFactory schemaFactory = SchemaFactory.newInstance( schemaLanguage ); catch ( SAXException e ) {
// return schemaFactory.newSchema(source); throw new MappingException( "Unable to load schema [" + schemaName + "]", e );
// } }
// catch ( SAXException e ) { catch ( IOException e ) {
// throw new MappingException( "Unable to load schema [" + schemaName + "]", e ); throw new MappingException( "Unable to load schema [" + schemaName + "]", e );
// } }
// catch ( IOException e ) { finally {
// throw new MappingException( "Unable to load schema [" + schemaName + "]", e ); try {
// } schemaStream.close();
// finally { }
// try { catch ( IOException e ) {
// schemaStream.close(); log.debugf( "Problem closing schema stream - %s", e.toString() );
// } }
// catch ( IOException e ) { }
// log.warn( "Problem closing schema stream [{}]", e.toString() ); }
// } catch ( IOException e ) {
// } throw new MappingException( "Stream error handling schema url [" + url.toExternalForm() + "]" );
// } }
// catch ( IOException e ) {
// throw new MappingException( "Stream error handling schema url [" + url.toExternalForm() + "]" ); }
// }
//
// }
} }

View File

@ -0,0 +1,35 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2013, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.internal.util.xml;
import org.hibernate.InvalidMappingException;
/**
* @author Steve Ebersole
*/
public class UnsupportedOrmXsdVersionException extends InvalidMappingException {
public UnsupportedOrmXsdVersionException(String version, Origin origin) {
super( "Encountered unsupported orm.xml xsd version [" + version + "]", origin.getType(), origin.getName() );
}
}

View File

@ -216,8 +216,8 @@ public class JaxbHelper {
} }
public static final String HBM_SCHEMA_NAME = "org/hibernate/hibernate-mapping-4.0.xsd"; public static final String HBM_SCHEMA_NAME = "org/hibernate/hibernate-mapping-4.0.xsd";
public static final String ORM_1_SCHEMA_NAME = "org/hibernate/ejb/orm_1_0.xsd"; public static final String ORM_1_SCHEMA_NAME = "org/hibernate/jpa/orm_1_0.xsd";
public static final String ORM_2_SCHEMA_NAME = "org/hibernate/ejb/orm_2_0.xsd"; public static final String ORM_2_SCHEMA_NAME = "org/hibernate/jpa/orm_2_0.xsd";
private Schema hbmSchema; private Schema hbmSchema;

View File

@ -4,7 +4,7 @@
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
version="2.1"> version="2.1">
<jaxb:bindings schemaLocation="../resources/org/hibernate/ejb/orm_2_0.xsd" node="/xsd:schema"> <jaxb:bindings schemaLocation="../resources/org/hibernate/jpa/orm_2_0.xsd" node="/xsd:schema">
<jaxb:schemaBindings> <jaxb:schemaBindings>
<jaxb:nameXmlTransform> <jaxb:nameXmlTransform>
<jaxb:typeName prefix="Jaxb"/> <jaxb:typeName prefix="Jaxb"/>

View File

@ -50,8 +50,9 @@ import static org.junit.Assert.fail;
* @author Strong Liu * @author Strong Liu
*/ */
public abstract class AbstractMockerTest { public abstract class AbstractMockerTest {
private static final String ORM1_MAPPING_XSD = "org/hibernate/ejb/orm_1_0.xsd"; private static final String ORM1_MAPPING_XSD = "org/hibernate/jpa/orm_1_0.xsd";
private static final String ORM2_MAPPING_XSD = "org/hibernate/ejb/orm_2_0.xsd"; private static final String ORM2_MAPPING_XSD = "org/hibernate/jpa/orm_2_0.xsd";
private IndexBuilder indexBuilder; private IndexBuilder indexBuilder;
private Index index; private Index index;
private ServiceRegistry serviceRegistry; private ServiceRegistry serviceRegistry;

View File

@ -25,14 +25,15 @@ package org.hibernate.test.annotations.xml.ejb3;
import java.io.InputStream; import java.io.InputStream;
import org.hibernate.cfg.Configuration;
import org.hibernate.internal.util.xml.UnsupportedOrmXsdVersionException;
import org.junit.Test; import org.junit.Test;
import org.hibernate.MappingException;
import org.hibernate.cfg.Configuration;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail;
@TestForIssue(jiraKey = "HHH-6271") @TestForIssue(jiraKey = "HHH-6271")
public class NonExistentOrmVersionTest extends BaseCoreFunctionalTestCase { public class NonExistentOrmVersionTest extends BaseCoreFunctionalTestCase {
@ -44,14 +45,9 @@ public class NonExistentOrmVersionTest extends BaseCoreFunctionalTestCase {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFileName ); InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFileName );
config.addInputStream( is ); config.addInputStream( is );
config.buildMappings(); config.buildMappings();
fail( "Expecting failure due to unsupported xsd version" );
} }
catch ( MappingException mappingException ) { catch ( UnsupportedOrmXsdVersionException expected ) {
Throwable cause = mappingException.getCause();
assertTrue(
cause.getMessage().contains(
"Value '3.0' of attribute 'version' of element 'entity-mappings' is not valid"
)
);
} }
} }
} }

View File

@ -0,0 +1,17 @@
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=info, stdout
log4j.logger.org.hibernate.tool.hbm2ddl=trace
log4j.logger.org.hibernate.testing.cache=debug
# SQL Logging - HHH-6833
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.hql.internal.ast=debug
log4j.logger.org.hibernate.sql.ordering.antlr=debug