eclipselink icon indicating copy to clipboard operation
eclipselink copied to clipboard

EclipseLink is missing doPrivileged for setAccessible when parsing JPQL query with EXTRACT

Open ajaypaul-ibm opened this issue 2 years ago • 0 comments

JPQL that includes EXTRACT, such as, ... WHERE EXTRACT (HOUR FROM o.start) BETWEEN ?1 AND ?2 AND EXTRACT (MINUTE FROM o.start)=?3 fails when Java 2 security is enabled because EclipseLink attempts method.setAccessible without a doPrivileged,

java.security.AccessControlException: Access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")java.base/java.security.AccessController.throwACE(AccessController.java:177) java.base/java.security.AccessController.checkPermissionHelper(AccessController.java:239) java.base/java.security.AccessController.checkPermission(AccessController.java:386) java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416) com.ibm.ws.kernel.launch.internal.MissingDoPrivDetectionSecurityManager.checkPermission(MissingDoPrivDetectionSecurityManager.java:47) java.base/java.lang.reflect.AccessibleObject.checkPermission(AccessibleObject.java:91) java.base/java.lang.reflect.Method.setAccessible(Method.java:192) org.eclipse.persistence.jpa.jpql.parser.AbstractExpression.acceptUnknownVisitor(AbstractExpression.java:247) org.eclipse.persistence.jpa.jpql.parser.AbstractExpression.acceptUnknownVisitor(AbstractExpression.java:192) org.eclipse.persistence.jpa.jpql.parser.ExtractExpression.accept(ExtractExpression.java:72) org.eclipse.persistence.jpa.jpql.parser.BetweenExpression.acceptChildren(BetweenExpression.java:104) org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743) org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:81) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:2640) org.eclipse.persistence.jpa.jpql.parser.BetweenExpression.accept(BetweenExpression.java:99) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateCompoundExpression(AbstractGrammarValidator.java:2250) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateLogicalExpression(AbstractGrammarValidator.java:2472) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:2554) org.eclipse.persistence.jpa.jpql.parser.AndExpression.accept(AndExpression.java:59) org.eclipse.persistence.jpa.jpql.parser.AbstractSingleEncapsulatedExpression.acceptChildren(AbstractSingleEncapsulatedExpression.java:53) org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743) org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:439) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:4054) org.eclipse.persistence.jpa.jpql.parser.SubExpression.accept(SubExpression.java:49) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateAbstractConditionalClause(AbstractGrammarValidator.java:1676) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:4333) org.eclipse.persistence.jpa.jpql.parser.WhereClause.accept(WhereClause.java:56) org.eclipse.persistence.jpa.jpql.parser.AbstractSelectStatement.acceptChildren(AbstractSelectStatement.java:94) org.eclipse.persistence.jpa.jpql.parser.SelectStatement.acceptChildren(SelectStatement.java:105) org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743) org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:399) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:3993) org.eclipse.persistence.jpa.jpql.parser.SelectStatement.accept(SelectStatement.java:100) org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:3604) org.eclipse.persistence.jpa.jpql.parser.JPQLExpression.accept(JPQLExpression.java:135) org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:321) org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:271) org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:164) org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:141) org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:117) org.eclipse.persistence.internal.jpa.EJBQueryImpl.(EJBQueryImpl.java:104) org.eclipse.persistence.internal.jpa.EJBQueryImpl.(EJBQueryImpl.java:88) org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1726) org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1749)

ajaypaul-ibm avatar Oct 25 '23 09:10 ajaypaul-ibm