Author: hardy.ferentschik
Date: 2009-07-10 06:08:50 -0400 (Fri, 10 Jul 2009)
New Revision: 17063
Added:
jpamodelgen/trunk/test/src/main/resources/META-INF/dummy.xml
Modified:
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/xml/XmlMetaEntity.java
jpamodelgen/trunk/test/src/main/resources/META-INF/persistence.xml
jpamodelgen/trunk/test/src/test/java/tests/XmlMappingTest.java
Log:
added some error handling
Modified:
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java
===================================================================
---
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java 2009-07-10
09:30:57 UTC (rev 17062)
+++
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/JPAMetaModelEntityProcessor.java 2009-07-10
10:08:50 UTC (rev 17063)
@@ -162,9 +162,17 @@
Collection<Entity> entities = mappings.getEntity();
for ( Entity entity : entities ) {
String fullyQualifiedClassName = packageName + "." + entity.getClazz();
- Elements utils = processingEnv.getElementUtils();
+
+ if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
+ processingEnv.getMessager().printMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " is mapped in xml, but class does not exists.
Skipping meta model generation."
+ );
+ continue;
+ }
+
XmlMetaEntity metaEntity = new XmlMetaEntity(
- entity, packageName, utils.getTypeElement( fullyQualifiedClassName )
+ entity, packageName, getXmlMappedType( fullyQualifiedClassName )
);
if ( context.getMetaEntitiesToProcess().containsKey( fullyQualifiedClassName ) ) {
@@ -177,14 +185,32 @@
}
}
+ private boolean xmlMappedTypeExists(String fullyQualifiedClassName) {
+ Elements utils = processingEnv.getElementUtils();
+ return utils.getTypeElement( fullyQualifiedClassName ) != null;
+ }
+
+ private TypeElement getXmlMappedType(String fullyQualifiedClassName) {
+ Elements utils = processingEnv.getElementUtils();
+ return utils.getTypeElement( fullyQualifiedClassName );
+ }
+
private void parseEmbeddable(EntityMappings mappings) {
String packageName = mappings.getPackage();
Collection<org.hibernate.jpa.metamodel.xml.jaxb.Embeddable> embeddables =
mappings.getEmbeddable();
for ( org.hibernate.jpa.metamodel.xml.jaxb.Embeddable embeddable : embeddables ) {
String fullyQualifiedClassName = packageName + "." + embeddable.getClazz();
- Elements utils = processingEnv.getElementUtils();
+
+ if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
+ processingEnv.getMessager().printMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " is mapped in xml, but class does not exists.
Skipping meta model generation."
+ );
+ continue;
+ }
+
XmlMetaEntity metaEntity = new XmlMetaEntity(
- embeddable, packageName, utils.getTypeElement( fullyQualifiedClassName )
+ embeddable, packageName, getXmlMappedType( fullyQualifiedClassName )
);
if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey(
fullyQualifiedClassName ) ) {
@@ -202,9 +228,17 @@
Collection<org.hibernate.jpa.metamodel.xml.jaxb.MappedSuperclass>
mappedSuperClasses = mappings.getMappedSuperclass();
for ( org.hibernate.jpa.metamodel.xml.jaxb.MappedSuperclass mappedSuperClass :
mappedSuperClasses ) {
String fullyQualifiedClassName = packageName + "." +
mappedSuperClass.getClazz();
- Elements utils = processingEnv.getElementUtils();
+
+ if ( !xmlMappedTypeExists( fullyQualifiedClassName ) ) {
+ processingEnv.getMessager().printMessage(
+ Diagnostic.Kind.WARNING,
+ fullyQualifiedClassName + " is mapped in xml, but class does not exists.
Skipping meta model generation."
+ );
+ continue;
+ }
+
XmlMetaEntity metaEntity = new XmlMetaEntity(
- mappedSuperClass, packageName, utils.getTypeElement( fullyQualifiedClassName )
+ mappedSuperClass, packageName, getXmlMappedType( fullyQualifiedClassName )
);
if ( context.getMetaSuperclassAndEmbeddableToProcess().containsKey(
fullyQualifiedClassName ) ) {
Modified:
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/xml/XmlMetaEntity.java
===================================================================
---
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/xml/XmlMetaEntity.java 2009-07-10
09:30:57 UTC (rev 17062)
+++
jpamodelgen/trunk/generator/src/main/java/org/hibernate/jpa/metamodel/ap/xml/XmlMetaEntity.java 2009-07-10
10:08:50 UTC (rev 17063)
@@ -171,7 +171,6 @@
return types;
}
- // TODO - so far only prototype. Only tested for the Order orm.xml
private String getType(String propertyName) {
String typeName = null;
for ( Element elem : element.getEnclosedElements() ) {
Copied: jpamodelgen/trunk/test/src/main/resources/META-INF/dummy.xml (from rev 17062,
jpamodelgen/trunk/test/src/main/resources/META-INF/order.xml)
===================================================================
--- jpamodelgen/trunk/test/src/main/resources/META-INF/dummy.xml
(rev 0)
+++ jpamodelgen/trunk/test/src/main/resources/META-INF/dummy.xml 2009-07-10 10:08:50 UTC
(rev 17063)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_2_0.xsd"
+ version="2.0"
+ >
+ <package>model</package>
+ <entity class="Dummy" access="FIELD"
metadata-complete="true"> <!-- Class does not exist -->
+ <attributes>
+ <id name="id"/>
+ </attributes>
+ </entity>
+</entity-mappings>
Modified: jpamodelgen/trunk/test/src/main/resources/META-INF/persistence.xml
===================================================================
--- jpamodelgen/trunk/test/src/main/resources/META-INF/persistence.xml 2009-07-10 09:30:57
UTC (rev 17062)
+++ jpamodelgen/trunk/test/src/main/resources/META-INF/persistence.xml 2009-07-10 10:08:50
UTC (rev 17063)
@@ -5,6 +5,7 @@
<persistence-unit name="annotation-processor"
transaction-type="JTA">
<description>Test persistence unit</description>
<mapping-file>/META-INF/order.xml</mapping-file>
+ <mapping-file>/META-INF/dummy.xml</mapping-file>
<mapping-file>/model/xmlmapped/address.xml</mapping-file>
<mapping-file>/model/xmlmapped/building.xml</mapping-file>
<mapping-file>/model/xmlmapped/mammal.xml</mapping-file>
Modified: jpamodelgen/trunk/test/src/test/java/tests/XmlMappingTest.java
===================================================================
--- jpamodelgen/trunk/test/src/test/java/tests/XmlMappingTest.java 2009-07-10 09:30:57 UTC
(rev 17062)
+++ jpamodelgen/trunk/test/src/test/java/tests/XmlMappingTest.java 2009-07-10 10:08:50 UTC
(rev 17063)
@@ -30,4 +30,9 @@
assertTrue( mammal.getSuperclass().equals( being ) );
}
+
+ @Test(expectedExceptions = ClassNotFoundException.class)
+ public void testNonExistentMappedClassesGetIgnored() throws Exception {
+ Class.forName( "model.Dummy_" );
+ }
}
\ No newline at end of file