Author: rmannibucau Date: Tue Apr 1 05:42:07 2014 New Revision: 1583539 URL: http://svn.apache.org/r1583539 Log: TOMEE-1159 supporting javax.annotation new classes from webapp at runtime
Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java?rev=1583539&r1=1583538&r2=1583539&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderEnricher.java Tue Apr 1 05:42:07 2014 @@ -136,17 +136,17 @@ public final class TomEEClassLoaderEnric /** * Validation part */ - private static final String[][] FORBIDDEN_CLASSES = new String[][]{ - {"javax.persistence.Entity", null}, // JPA - {"javax.transaction.Transaction", null}, // JTA - {"javax.jws.WebService", null}, // JAXWS - {"javax.validation.Validation", null}, // BVal - {"javax.jms.Queue", null}, // JMS - {"javax.enterprise.context.ApplicationScoped", null}, // CDI - {"javax.inject.Inject", null}, // CDI - {"javax.ws.rs.Path", "You provide JAXRS API in the webapp, we tolerate it to support some advanced feature but if you expect TomEE to provide it you should remove it"}, // JAXRS - commented since we manage to find why jersey-core brings the api! - {"javax.ejb.EJB", null}, // EJB - {"javax.annotation.PostConstruct", null} // javax.annotation + private static final String[][] FORBIDDEN_CLASSES = new String[][]{ // name, spec +1 name, message. Note: [1] != null => [2] != null + {"javax.persistence.Entity", null, null}, // JPA + {"javax.transaction.Transaction", null, null}, // JTA + {"javax.jws.WebService", null, null}, // JAXWS + {"javax.validation.Validation", null, null}, // BVal + {"javax.jms.Queue", null, null}, // JMS + {"javax.enterprise.context.ApplicationScoped", null, null}, // CDI + {"javax.inject.Inject", null, null}, // CDI + {"javax.ws.rs.Path", "javax.ws.rs.core.Configurable", "You provide JAXRS 2 API in the webapp, we tolerate it to support some advanced feature but if you expect TomEE to provide it you should remove it"}, // JAXRS - commented since we manage to find why jersey-core brings the api! + {"javax.ejb.EJB", null, null}, // EJB + {"javax.annotation.PostConstruct", "javax.annotation.Priority", "You provide javax.annotation API 1.2 so we'll tolerate new classes but it should surely be upgraded in the container"} // javax.annotation }; public static boolean validateJarFile(final File file) throws IOException { @@ -181,14 +181,16 @@ public final class TomEEClassLoaderEnric final String entry = name[0].replace('.', '/') + ".class"; final JarEntry jarEntry = jarFile.getJarEntry(entry); if (jarEntry != null) { - if (name[1] == null) { - LOGGER.warning("jar '" + file.getAbsolutePath() + "' contains offending class: " + name[0] - + ". It will be ignored."); - return false; + if (name[1] != null) { + if (jarFile.getJarEntry(name[1].replace('.', '/') + ".class") != null) { + LOGGER.warning("jar '" + file.getAbsolutePath() + "' contains offending class: " + name[0] + + "but: " + name[2]); + return true; + } } LOGGER.warning("jar '" + file.getAbsolutePath() + "' contains offending class: " + name[0] - + "but: " + name[1]); - return true; + + ". It will be ignored."); + return false; } } return true;