[ 
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)

Reply via email to