diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPriv5Helper.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPriv5Helper.java deleted file mode 100644 index 6f1698c3b..000000000 --- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPriv5Helper.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openjpa.lib.util; - -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; -import java.security.PrivilegedAction; - -/** - * Helper class to obtain the Privilege(Exception)Action object to perform - * Java 2 doPrivilege security sensitive function call in the following - * methods: - * - * - * @author Albert Lee - */ - -public abstract class J2DoPriv5Helper extends J2DoPrivHelper { - - /** - * Return a PrivilegeAction object for AnnotatedElement.getAnnotations(). - * - * Requires security policy: - * 'permission java.lang.RuntimePermission "accessDeclaredMembers";' - * - * @return Annotation[] - */ - public static final PrivilegedAction getAnnotationsAction( - final AnnotatedElement element) { - return new PrivilegedAction() { - public Annotation [] run() { - return element.getAnnotations(); - } - }; - } - - /** - * Return a PrivilegeAction object for - * AnnotatedElement.getDeclaredAnnotations(). - * - * Requires security policy: - * 'permission java.lang.RuntimePermission "accessDeclaredMembers";' - * - * @return Annotation[] - */ - public static final PrivilegedAction - getDeclaredAnnotationsAction( - final AnnotatedElement element) { - return new PrivilegedAction() { - public Annotation [] run() { - return element.getDeclaredAnnotations(); - } - }; - } - - /** - * Return a PrivilegeAction object for - * AnnotatedElement.isAnnotationPresent(). - * - * Requires security policy: - * 'permission java.lang.RuntimePermission "accessDeclaredMembers";' - * - * @return Boolean - */ - public static final PrivilegedAction isAnnotationPresentAction( - final AnnotatedElement element, - final Class annotationClazz) { - return new PrivilegedAction() { - public Boolean run() { - return element.isAnnotationPresent(annotationClazz) - ? Boolean.TRUE : Boolean.FALSE; - } - }; - } -} diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java index 288e38190..b1908d28d 100644 --- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java +++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java @@ -24,7 +24,9 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.annotation.Annotation; import java.lang.reflect.AccessibleObject; +import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.InetAddress; @@ -98,6 +100,9 @@ import serp.bytecode.Project; *
  • serp.bytecode.BCClass.getFields *
  • serp.bytecode.FieldInstruction.getField *
  • serp.bytecode.Project.loadClass + *
  • AnnotatedElement.getAnnotations + *
  • AnnotatedElement.getDeclaredAnnotations + *
  • AnnotatedElement.isAnnotationPresent * * * If these methods are used, the following sample usage patterns should be @@ -1047,4 +1052,60 @@ public abstract class J2DoPrivHelper { } }; } + + /** + * Return a PrivilegeAction object for AnnotatedElement.getAnnotations(). + * + * Requires security policy: + * 'permission java.lang.RuntimePermission "accessDeclaredMembers";' + * + * @return Annotation[] + */ + public static final PrivilegedAction getAnnotationsAction( + final AnnotatedElement element) { + return new PrivilegedAction() { + public Annotation [] run() { + return element.getAnnotations(); + } + }; + } + + /** + * Return a PrivilegeAction object for + * AnnotatedElement.getDeclaredAnnotations(). + * + * Requires security policy: + * 'permission java.lang.RuntimePermission "accessDeclaredMembers";' + * + * @return Annotation[] + */ + public static final PrivilegedAction + getDeclaredAnnotationsAction( + final AnnotatedElement element) { + return new PrivilegedAction() { + public Annotation [] run() { + return element.getDeclaredAnnotations(); + } + }; + } + + /** + * Return a PrivilegeAction object for + * AnnotatedElement.isAnnotationPresent(). + * + * Requires security policy: + * 'permission java.lang.RuntimePermission "accessDeclaredMembers";' + * + * @return Boolean + */ + public static final PrivilegedAction isAnnotationPresentAction( + final AnnotatedElement element, + final Class annotationClazz) { + return new PrivilegedAction() { + public Boolean run() { + return element.isAnnotationPresent(annotationClazz) + ? Boolean.TRUE : Boolean.FALSE; + } + }; + } } diff --git a/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java b/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java index 20160ba61..4c96da77b 100644 --- a/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java +++ b/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java @@ -77,7 +77,7 @@ import org.apache.openjpa.jdbc.schema.Schemas; import org.apache.openjpa.jdbc.schema.Unique; import org.apache.openjpa.jdbc.sql.DBDictionary; import org.apache.openjpa.lib.log.Log; -import org.apache.openjpa.lib.util.J2DoPriv5Helper; +import org.apache.openjpa.lib.util.J2DoPrivHelper; import org.apache.openjpa.lib.util.Localizer; import org.apache.openjpa.meta.ClassMetaData; import org.apache.openjpa.meta.FieldMetaData; @@ -1308,7 +1308,7 @@ public class AnnotationPersistenceMappingParser if (xmlTypeClass != null && StringUtils.isEmpty(pcols[i].columnDefinition()) - && (AccessController.doPrivileged(J2DoPriv5Helper + && (AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(fm.getDeclaredType(), xmlTypeClass))).booleanValue()) { DBDictionary dict = ((MappingRepository) getRepository()) diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java index 16f42fc8a..b799a4c30 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java @@ -87,7 +87,7 @@ import org.apache.openjpa.kernel.QueryLanguages; import org.apache.openjpa.kernel.jpql.JPQLParser; import org.apache.openjpa.lib.conf.Configurations; import org.apache.openjpa.lib.log.Log; -import org.apache.openjpa.lib.util.J2DoPriv5Helper; +import org.apache.openjpa.lib.util.J2DoPrivHelper; import org.apache.openjpa.lib.util.Localizer; import org.apache.openjpa.meta.ClassMetaData; import org.apache.openjpa.meta.DelegatingMetaDataFactory; @@ -467,12 +467,12 @@ public class AnnotationPersistenceMetaDataParser // check immediately whether the user is using any annotations, // regardless of mode. this prevents adding non-entity classes to // repository if we're ignoring these annotations in mapping mode - if (!(AccessController.doPrivileged(J2DoPriv5Helper + if (!(AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(_cls, Entity.class))).booleanValue() - && !(AccessController.doPrivileged(J2DoPriv5Helper + && !(AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(_cls, Embeddable.class))) .booleanValue() - && !(AccessController.doPrivileged(J2DoPriv5Helper + && !(AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(_cls, MappedSuperclass.class))) .booleanValue()) return null; @@ -679,17 +679,17 @@ public class AnnotationPersistenceMetaDataParser String rsrc = StringUtils.replace(cls.getName(), ".", "/"); ClassLoader loader = AccessController.doPrivileged( - J2DoPriv5Helper.getClassLoaderAction(cls)); + J2DoPrivHelper.getClassLoaderAction(cls)); if (loader == null) loader = AccessController.doPrivileged( - J2DoPriv5Helper.getSystemClassLoaderAction()); + J2DoPrivHelper.getSystemClassLoaderAction()); if (loader == null) return null; URL url = AccessController.doPrivileged( - J2DoPriv5Helper.getResourceAction(loader, rsrc + ".java")); + J2DoPrivHelper.getResourceAction(loader, rsrc + ".java")); if (url == null) { url = AccessController.doPrivileged( - J2DoPriv5Helper.getResourceAction(loader, rsrc + ".class")); + J2DoPrivHelper.getResourceAction(loader, rsrc + ".class")); if (url == null) return null; } @@ -779,10 +779,10 @@ public class AnnotationPersistenceMetaDataParser meta.setDetachedState(detached.fieldName()); } else { Field[] fields = (Field[]) AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredFieldsAction( + J2DoPrivHelper.getDeclaredFieldsAction( meta.getDescribedType())); for (int i = 0; i < fields.length; i++) - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(fields[i], DetachedState.class))) .booleanValue()) meta.setDetachedState(fields[i].getName()); @@ -827,7 +827,7 @@ public class AnnotationPersistenceMetaDataParser Set seen = new HashSet(); do { for (Method m : (Method[]) AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredMethodsAction(sup))) { + J2DoPrivHelper.getDeclaredMethodsAction(sup))) { mods = m.getModifiers(); if (Modifier.isStatic(mods) || Modifier.isFinal(mods) || Object.class.equals(m.getDeclaringClass())) @@ -845,7 +845,7 @@ public class AnnotationPersistenceMetaDataParser MetaDataDefaults def = repos.getMetaDataFactory().getDefaults(); for (Method m : methods) { for (Annotation anno : (Annotation[]) AccessController - .doPrivileged(J2DoPriv5Helper + .doPrivileged(J2DoPrivHelper .getDeclaredAnnotationsAction(m))) { MetaDataTag tag = _tags.get(anno.annotationType()); if (tag == null) @@ -984,7 +984,7 @@ public class AnnotationPersistenceMetaDataParser fmd.setExplicit(true); AnnotatedElement el = (AnnotatedElement) member; - boolean lob = (AccessController.doPrivileged(J2DoPriv5Helper + boolean lob = (AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(el, Lob.class))).booleanValue(); if (isMetaDataMode()) { switch (pstrat) { diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java index f64b8742a..e24d17a7b 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java @@ -27,7 +27,7 @@ import java.security.AccessController; import org.apache.commons.lang.StringUtils; import org.apache.openjpa.conf.OpenJPAConfiguration; import org.apache.openjpa.lib.log.Log; -import org.apache.openjpa.lib.util.J2DoPriv5Helper; +import org.apache.openjpa.lib.util.J2DoPrivHelper; import org.apache.openjpa.lib.util.Localizer; import org.apache.openjpa.meta.DelegatingMetaDataFactory; import org.apache.openjpa.meta.FieldMetaData; @@ -173,10 +173,10 @@ public class AnnotationPersistenceXMLMetaDataParser { private XMLMetaData parseXMLClassAnnotations() { // check immediately whether the class has JAXB XML annotations if (_cls == null || xmlTypeClass == null - || !((AccessController.doPrivileged(J2DoPriv5Helper + || !((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(_cls, xmlTypeClass))).booleanValue() && (AccessController - .doPrivileged(J2DoPriv5Helper.isAnnotationPresentAction(_cls, + .doPrivileged(J2DoPrivHelper.isAnnotationPresentAction(_cls, xmlRootElementClass))).booleanValue())) return null; @@ -225,7 +225,7 @@ public class AnnotationPersistenceXMLMetaDataParser { Class superclass = cls.getSuperclass(); // handle inheritance at sub-element level - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(superclass, xmlTypeClass))) .booleanValue()) populateFromReflection(superclass, meta); @@ -247,7 +247,7 @@ public class AnnotationPersistenceXMLMetaDataParser { // avoid JAXB XML bind default name if (StringUtils.equals(XMLMetaData.defaultName, xmlname)) xmlname = member.getName(); - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(((Field) member).getType(), xmlTypeClass))).booleanValue()) { field = _repos.addXMLMetaData(((Field) member).getType() diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java index 735158859..8a50942d5 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java @@ -50,7 +50,7 @@ import javax.persistence.PreUpdate; import javax.persistence.Transient; import org.apache.commons.lang.StringUtils; -import org.apache.openjpa.lib.util.J2DoPriv5Helper; +import org.apache.openjpa.lib.util.J2DoPrivHelper; import org.apache.openjpa.lib.util.Localizer; import org.apache.openjpa.lib.log.Log; import org.apache.openjpa.meta.AbstractMetaDataDefaults; @@ -118,7 +118,7 @@ public class PersistenceMetaDataDefaults if (member == null) return null; AnnotatedElement el = (AnnotatedElement) member; - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(el, Transient.class))).booleanValue()) return TRANSIENT; if (fmd != null @@ -185,7 +185,7 @@ public class PersistenceMetaDataDefaults } //### EJB3: what if defined in XML? - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(type, Embeddable.class))).booleanValue()) return EMBEDDED; if (Serializable.class.isAssignableFrom(type)) @@ -260,10 +260,10 @@ public class PersistenceMetaDataDefaults int access = 0; if (annotated((Field[]) AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredFieldsAction(cls))).size() > 0) + J2DoPrivHelper.getDeclaredFieldsAction(cls))).size() > 0) access |= ClassMetaData.ACCESS_FIELD; if (annotated((Method[]) AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredMethodsAction(cls))).size() > 0 + J2DoPrivHelper.getDeclaredMethodsAction(cls))).size() > 0 || cls.isInterface()) // OpenJPA managed ifaces must use prop access access |= ClassMetaData.ACCESS_PROPERTY; return getAccessType(cls.getSuperclass()) | access; @@ -272,13 +272,13 @@ public class PersistenceMetaDataDefaults @Override protected List getFieldAccessNames(ClassMetaData meta) { return annotated((Field[]) AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredFieldsAction(meta.getDescribedType()))); + J2DoPrivHelper.getDeclaredFieldsAction(meta.getDescribedType()))); } @Override protected List getPropertyAccessNames(ClassMetaData meta) { return annotated((Method[]) AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredMethodsAction(meta.getDescribedType()))); + J2DoPrivHelper.getDeclaredMethodsAction(meta.getDescribedType()))); } /** @@ -290,7 +290,7 @@ public class PersistenceMetaDataDefaults String name; List annotated = new ArrayList(members.length); for (int i = 0; i < members.length; i++) { - annos = (Annotation[]) AccessController.doPrivileged(J2DoPriv5Helper + annos = (Annotation[]) AccessController.doPrivileged(J2DoPrivHelper .getAnnotationsAction(members[i])); for (int j = 0; j < annos.length; j++) { name = annos[j].annotationType().getName(); @@ -313,7 +313,7 @@ public class PersistenceMetaDataDefaults try { // check for setters for methods Method setter = AccessController.doPrivileged( - J2DoPriv5Helper.getDeclaredMethodAction( + J2DoPrivHelper.getDeclaredMethodAction( meta.getDescribedType(), "set" + StringUtils.capitalize(name), new Class[] { ((Method) member).getReturnType() })); @@ -337,7 +337,7 @@ public class PersistenceMetaDataDefaults private boolean isAnnotatedTransient(Member member) { return member instanceof AnnotatedElement - && (AccessController.doPrivileged(J2DoPriv5Helper + && (AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(((AnnotatedElement) member), Transient.class))).booleanValue(); } diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java index e19cde618..27858f805 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java @@ -46,7 +46,7 @@ import org.apache.openjpa.lib.meta.ClassAnnotationMetaDataFilter; import org.apache.openjpa.lib.meta.ClassArgParser; import org.apache.openjpa.lib.meta.MetaDataFilter; import org.apache.openjpa.lib.meta.MetaDataParser; -import org.apache.openjpa.lib.util.J2DoPriv5Helper; +import org.apache.openjpa.lib.util.J2DoPrivHelper; import org.apache.openjpa.lib.util.Localizer; import org.apache.openjpa.lib.util.Options; import org.apache.openjpa.meta.AbstractCFMetaDataFactory; @@ -293,24 +293,24 @@ public class PersistenceMetaDataFactory return null; Collection classes = repos.loadPersistentTypes(false, loader); for (Class cls : (Collection) classes) { - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(cls, NamedQuery.class))) .booleanValue() && hasNamedQuery (queryName, (NamedQuery) cls.getAnnotation(NamedQuery.class))) return cls; - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(cls, NamedQueries.class))) .booleanValue() && hasNamedQuery(queryName, ((NamedQueries) cls. getAnnotation(NamedQueries.class)).value())) return cls; - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(cls, NamedNativeQuery.class))) .booleanValue() && hasNamedNativeQuery(queryName, (NamedNativeQuery) cls. getAnnotation(NamedNativeQuery.class))) return cls; - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(cls, NamedNativeQueries.class))) .booleanValue() && hasNamedNativeQuery(queryName, ((NamedNativeQueries) cls. @@ -329,14 +329,14 @@ public class PersistenceMetaDataFactory Collection classes = repos.loadPersistentTypes(false, loader); for (Class cls : (Collection) classes) { - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(cls, SqlResultSetMapping.class))) .booleanValue() && hasRSMapping(rsMappingName, (SqlResultSetMapping) cls. getAnnotation(SqlResultSetMapping.class))) return cls; - if ((AccessController.doPrivileged(J2DoPriv5Helper + if ((AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(cls, SqlResultSetMappings.class))) .booleanValue() && hasRSMapping(rsMappingName, ((SqlResultSetMappings) cls. @@ -458,11 +458,11 @@ public class PersistenceMetaDataFactory ClassLoader loader = repos.getConfiguration(). getClassResolverInstance().getClassLoader(getClass(), null); URL rsrc = AccessController.doPrivileged( - J2DoPriv5Helper.getResourceAction(loader, "META-INF/orm.xml")); + J2DoPrivHelper.getResourceAction(loader, "META-INF/orm.xml")); if (rsrc != null) { File file = new File(rsrc.getFile()); if ((AccessController.doPrivileged( - J2DoPriv5Helper.existsAction(file))).booleanValue()) + J2DoPrivHelper.existsAction(file))).booleanValue()) return file; } return new File("orm.xml");