[
https://issues.apache.org/jira/browse/SLING-10167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17291143#comment-17291143
]
Stefan Seifert commented on SLING-10167:
----------------------------------------
for some reason these illegal paths in the JCR query do not lead to problems in
a running instance - queries seem to be executed. however, the problem can be
reproduced easily in unit tests e..g with sling-mock-oak - e.g. with this
branch using Sling Resource Resolver 1.7.2:
https://github.com/apache/sling-org-apache-sling-testing-sling-mock-oak/tree/feature/SLING-10167-reproduce-sling-alias-query-problem
this leads to tons of exceptions in the unit tests like:
{noformat}
java.lang.RuntimeException: Unable to initialize JCR_OAK resource resolver
factory: Unable to invoke method 'activate' for class
org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator
at
org.apache.sling.testing.mock.sling.context.ContextResourceResolverFactory.get(ContextResourceResolverFactory.java:68)
at
org.apache.sling.testing.mock.sling.context.SlingContextImpl.newResourceResolverFactory(SlingContextImpl.java:145)
at
org.apache.sling.testing.mock.sling.context.SlingContextImpl.resourceResolverFactory(SlingContextImpl.java:150)
at
org.apache.sling.testing.mock.sling.context.SlingContextImpl.setUp(SlingContextImpl.java:134)
at
org.apache.sling.testing.mock.sling.junit.SlingContext.access$100(SlingContext.java:49)
at
org.apache.sling.testing.mock.sling.junit.SlingContext$1.before(SlingContext.java:153)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at
org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
at
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:377)
at
org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:138)
at
org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:465)
at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:451)
Caused by: java.lang.RuntimeException: Unable to invoke method 'activate' for
class org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator
at
org.apache.sling.testing.mock.osgi.OsgiServiceUtil.invokeMethod(OsgiServiceUtil.java:325)
at
org.apache.sling.testing.mock.osgi.OsgiServiceUtil.invokeLifecycleMethod(OsgiServiceUtil.java:218)
at
org.apache.sling.testing.mock.osgi.OsgiServiceUtil.activateDeactivate(OsgiServiceUtil.java:89)
at
org.apache.sling.testing.mock.osgi.MockOsgi.activate(MockOsgi.java:186)
at
org.apache.sling.testing.mock.sling.ResourceResolverFactoryInitializer.initializeResourceResolverFactoryActivator(ResourceResolverFactoryInitializer.java:157)
at
org.apache.sling.testing.mock.sling.ResourceResolverFactoryInitializer.setUp(ResourceResolverFactoryInitializer.java:79)
at
org.apache.sling.testing.mock.sling.MockSling.newResourceResolverFactory(MockSling.java:76)
at
org.apache.sling.testing.mock.sling.context.ContextResourceResolverFactory.get(ContextResourceResolverFactory.java:47)
... 24 more
Caused by: java.lang.AssertionError: Invalid path [/jcr:system/]
at
org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute(PathUtils.java:89)
at
org.apache.jackrabbit.oak.query.SQL2Parser.readAbsolutePath(SQL2Parser.java:643)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseConditionFunctionIf(SQL2Parser.java:575)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseCondition(SQL2Parser.java:407)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseCondition(SQL2Parser.java:400)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseAnd(SQL2Parser.java:390)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseConstraint(SQL2Parser.java:382)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseCondition(SQL2Parser.java:402)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseAnd(SQL2Parser.java:390)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseConstraint(SQL2Parser.java:382)
at
org.apache.jackrabbit.oak.query.SQL2Parser.parseSelect(SQL2Parser.java:238)
at org.apache.jackrabbit.oak.query.SQL2Parser.parse(SQL2Parser.java:158)
at
org.apache.jackrabbit.oak.query.QueryEngineImpl.parseQuery(QueryEngineImpl.java:179)
at
org.apache.jackrabbit.oak.query.QueryEngineImpl.executeQuery(QueryEngineImpl.java:261)
at
org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl.executeQuery(QueryManagerImpl.java:136)
at
org.apache.jackrabbit.oak.jcr.query.QueryImpl$2.perform(QueryImpl.java:104)
at
org.apache.jackrabbit.oak.jcr.query.QueryImpl$2.perform(QueryImpl.java:100)
at
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:207)
at
org.apache.jackrabbit.oak.jcr.query.QueryImpl.execute(QueryImpl.java:99)
at
org.apache.sling.jcr.resource.internal.helper.JcrResourceUtil.query(JcrResourceUtil.java:56)
at
org.apache.sling.jcr.resource.internal.helper.jcr.BasicQueryLanguageProvider.findResources(BasicQueryLanguageProvider.java:80)
at
org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.findResources(AuthenticatedResourceProvider.java:260)
at
org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl.findResources(ResourceResolverControl.java:459)
at
org.apache.sling.resourceresolver.impl.ResourceResolverImpl.findResources(ResourceResolverImpl.java:549)
at
org.apache.sling.resourceresolver.impl.mapping.MapEntries.loadAliases(MapEntries.java:1020)
at
org.apache.sling.resourceresolver.impl.mapping.MapEntries.doInit(MapEntries.java:180)
at
org.apache.sling.resourceresolver.impl.mapping.MapEntries.<init>(MapEntries.java:142)
at
org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.activate(CommonResourceResolverFactoryImpl.java:318)
at
org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator.registerFactory(ResourceResolverFactoryActivator.java:520)
at
org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator.checkFactoryPreconditions(ResourceResolverFactoryActivator.java:584)
at
org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator.access$100(ResourceResolverFactoryActivator.java:67)
at
org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator$1.providerAdded(ResourceResolverFactoryActivator.java:418)
at
org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker.register(ResourceProviderTracker.java:217)
at
org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker.access$200(ResourceProviderTracker.java:59)
at
org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker$1.addingService(ResourceProviderTracker.java:130)
at
org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker$1.addingService(ResourceProviderTracker.java:106)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
at
org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker.activate(ResourceProviderTracker.java:134)
at
org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator.activate(ResourceResolverFactoryActivator.java:411)
at jdk.internal.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
org.apache.sling.testing.mock.osgi.OsgiServiceUtil.invokeMethod(OsgiServiceUtil.java:316)
... 31 more
{noformat}
failing in {{PathUtils.isAbsolute}} when validating the paths given in the
query.
i'm completely puzzled why these queries do not fail in runtime, but the query
is faulty in every cause.
> MapEntries.loadAliases generets JCR queries with illegal absolute paths
> -----------------------------------------------------------------------
>
> Key: SLING-10167
> URL: https://issues.apache.org/jira/browse/SLING-10167
> Project: Sling
> Issue Type: Bug
> Components: ResourceResolver
> Affects Versions: Resource Resolver 1.7.2
> Reporter: Stefan Seifert
> Assignee: Stefan Seifert
> Priority: Major
> Fix For: Resource Resolver 1.7.4
>
>
> the code introduced with SLING-9535 generates JCR queries like this to load
> existing alias on startup:
> {noformat}
> SELECT sling:alias FROM nt:base AS page WHERE (NOT
> ISDESCENDANTNODE(page,"/jcr:system/")) AND sling:alias IS NOT NULL
> SELECT sling:alias FROM nt:base AS page WHERE (NOT
> ISDESCENDANTNODE(page,"/parent1/")) AND sling:alias IS NOT NULL
> {noformat}
> this query are invalid, as "/jcr:system/" or "/parent1/" are not valid paths
> - valid paths must end not with "/".
--
This message was sent by Atlassian Jira
(v8.3.4#803005)