[hibernate-commits] Hibernate SVN: r17063 - in jpamodelgen/trunk: generator/src/main/java/org/hibernate/jpa/metamodel/ap/xml and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jul 10 06:08:51 EDT 2009


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




More information about the hibernate-commits mailing list