[ 
https://issues.apache.org/jira/browse/SLING-12987?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eric Norman resolved SLING-12987.
---------------------------------
    Resolution: Fixed

Merged PR at:  
[{{48f7dbf}}|https://github.com/apache/sling-org-apache-sling-serviceuser-webconsole/commit/48f7dbfcddab006d88b7e39c3a468969473b2c9f]

> Viewing serviceuser details fails if sling:OsgiConfig type is not registered
> ----------------------------------------------------------------------------
>
>                 Key: SLING-12987
>                 URL: https://issues.apache.org/jira/browse/SLING-12987
>             Project: Sling
>          Issue Type: Bug
>            Reporter: Eric Norman
>            Assignee: Eric Norman
>            Priority: Major
>             Fix For: Service User WebConsole 1.0.6
>
>
> The lookup of serviceuser configurations throws exception if the 
> sling:OsgiConfig type is not registered.  This can happen when the 
> org.apache.sling.installer.provider.jcr bundle is not installed.
> The logs report an error about the unknown node type and the browser shows a 
> "500 Server Error" page.
>  
> {code:java}
> 30.10.2025 09:08:33.038 *ERROR* [qtp1775497977-1209] org.apache.felix.http 
> Exception while processing request to 
> /system/console/serviceusersorg.apache.sling.api.resource.QuerySyntaxException:
>  java.text.ParseException: Query: SELECT * FROM [sling:OsgiConfig] AS(*)s 
> WHERE (ISDESCENDANTNODE([/apps]) OR ISDESCENDANTNODE([/libs])) AND NAME(s) 
> LIKE 
> 'org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended%' AND 
> [user.mapping] LIKE '%=enapps-games'; expected: unknown node type     at 
> org.apache.sling.jcr.resource.internal.helper.jcr.BasicQueryLanguageProvider.findResources(BasicQueryLanguageProvider.java:91)
>  [org.apache.sling.jcr.resource:3.3.6] at 
> org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.findResources(AuthenticatedResourceProvider.java:320)
>  [org.apache.sling.resourceresolver:2.0.2]      at 
> org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl.findResources(ResourceResolverControl.java:610)
>  [org.apache.sling.resourceresolver:2.0.2]      at 
> org.apache.sling.resourceresolver.impl.ResourceResolverImpl.findResources(ResourceResolverImpl.java:651)
>  [org.apache.sling.resourceresolver:2.0.2]   at 
> org.apache.sling.serviceuser.webconsole.impl.ServiceUserWebConsolePlugin.findConfigurations(ServiceUserWebConsolePlugin.java:301)
>  [org.apache.sling.serviceuser.webconsole:1.0.5.SNAPSHOT]   at 
> org.apache.sling.serviceuser.webconsole.impl.ServiceUserWebConsolePlugin.printServiceUserDetails(ServiceUserWebConsolePlugin.java:646)
>  [org.apache.sling.serviceuser.webconsole:1.0.5.SNAPSHOT]      at 
> org.apache.sling.serviceuser.webconsole.impl.ServiceUserWebConsolePlugin.renderContent(ServiceUserWebConsolePlugin.java:802)
>  [org.apache.sling.serviceuser.webconsole:1.0.5.SNAPSHOT]        at 
> org.apache.felix.webconsole.AbstractWebConsolePlugin.doGet(AbstractWebConsolePlugin.java:182)
>  [org.apache.felix.webconsole:5.0.18]   at 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:529) 
> [org.apache.felix.http.servlet-api:6.1.0]       at 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:623) 
> [org.apache.felix.http.servlet-api:6.1.0]       at 
> org.apache.felix.http.jakartawrappers.ServletWrapper.service(ServletWrapper.java:74)
>  [org.apache.felix.http.wrappers:6.1.0]  at 
> org.apache.felix.webconsole.internal.servlet.OsgiManager.doService(OsgiManager.java:520)
>  [org.apache.felix.webconsole:5.0.18]        at 
> org.apache.felix.webconsole.internal.servlet.OsgiManager$3.run(OsgiManager.java:430)
>  [org.apache.felix.webconsole:5.0.18]    at 
> java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
>      at 
> org.apache.felix.webconsole.internal.servlet.OsgiManager.service(OsgiManager.java:416)
>  [org.apache.felix.webconsole:5.0.18]  at 
> jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723) 
> [org.apache.felix.http.servlet-api:6.1.0]     at 
> org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:128)
>  [org.apache.felix.http.jetty12.light:1.1.4]       at 
> org.apache.felix.http.base.internal.handler.WhiteboardServletHandler.handle(WhiteboardServletHandler.java:164)
>  [org.apache.felix.http.jetty12.light:1.1.4]   at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:86)
>  [org.apache.felix.http.jetty12.light:1.1.4]   at 
> org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:120) 
> [org.apache.sling.i18n:3.0.0]    at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:145)
>  [org.apache.felix.http.jetty12.light:1.1.4] at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
>  [org.apache.felix.http.jetty12.light:1.1.4]   at 
> org.apache.felix.http.base.internal.dispatch.Dispatcher$1.doFilter(Dispatcher.java:167)
>  [org.apache.felix.http.jetty12.light:1.1.4]  at 
> org.apache.felix.http.base.internal.whiteboard.WhiteboardManager$1.doFilter(WhiteboardManager.java:967)
>  [org.apache.felix.http.jetty12.light:1.1.4]  at 
> org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:122)
>  [org.apache.felix.http.sslfilter:2.0.2]      at 
> org.apache.felix.http.base.internal.handler.PreprocessorHandler.handle(PreprocessorHandler.java:132)
>  [org.apache.felix.http.jetty12.light:1.1.4]     at 
> org.apache.felix.http.base.internal.whiteboard.WhiteboardManager$1.doFilter(WhiteboardManager.java:973)
>  [org.apache.felix.http.jetty12.light:1.1.4]  at 
> org.apache.sling.engine.impl.log.RequestLoggerPreprocessor.doFilter(RequestLoggerPreprocessor.java:46)
>  [org.apache.sling.engine:3.0.0]       at 
> org.apache.felix.http.base.internal.handler.PreprocessorHandler.handle(PreprocessorHandler.java:132)
>  [org.apache.felix.http.jetty12.light:1.1.4]     at 
> org.apache.felix.http.base.internal.whiteboard.WhiteboardManager$1.doFilter(WhiteboardManager.java:973)
>  [org.apache.felix.http.jetty12.light:1.1.4]  at 
> org.apache.felix.http.base.internal.whiteboard.WhiteboardManager.invokePreprocessors(WhiteboardManager.java:977)
>  [org.apache.felix.http.jetty12.light:1.1.4] at 
> org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:95)
>  [org.apache.felix.http.jetty12.light:1.1.4]     at 
> org.apache.felix.http.base.internal.dispatch.DispatcherServlet.service(DispatcherServlet.java:49)
>  [org.apache.felix.http.jetty12.light:1.1.4]        at 
> jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723) 
> [org.apache.felix.http.servlet-api:6.1.0]     at 
> org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736) 
> [org.eclipse.jetty.ee10.servlet:12.0.23] at 
> org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)
>  [org.eclipse.jetty.ee10.servlet:12.0.23]   at 
> org.eclipse.jetty.ee10.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:195)
>  [org.eclipse.jetty.ee10.websocket.servlet:12.0.23] at 
> org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205) 
> [org.eclipse.jetty.ee10.servlet:12.0.23] at 
> org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)
>  [org.eclipse.jetty.ee10.servlet:12.0.23]      at 
> org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)
>  [org.eclipse.jetty.ee10.servlet:12.0.23]        at 
> org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)
>  [org.eclipse.jetty.ee10.servlet:12.0.23]     at 
> org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440) 
> [org.eclipse.jetty.ee10.servlet:12.0.23]       at 
> org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470) 
> [org.eclipse.jetty.ee10.servlet:12.0.23]       at 
> org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717) 
> [org.eclipse.jetty.ee10.servlet:12.0.23]       at 
> org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)
>  [org.eclipse.jetty.server:12.0.23]  at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:151)
>  [org.eclipse.jetty.server:12.0.23]       at 
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:611)
>  [org.eclipse.jetty.server:12.0.23]    at 
> org.eclipse.jetty.server.Server.handle(Server.java:182) 
> [org.eclipse.jetty.server:12.0.23]   at 
> org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:678)
>  [org.eclipse.jetty.server:12.0.23]  at 
> org.eclipse.jetty.util.thread.Invocable$ReadyTask.run(Invocable.java:177) 
> [org.eclipse.jetty.util:12.0.23]   at 
> org.eclipse.jetty.http2.server.internal.HttpStreamOverHTTP2$1.run(HttpStreamOverHTTP2.java:136)
>  [org.eclipse.jetty.http2.server:12.0.23]     at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
>  [org.eclipse.jetty.util:12.0.23]        at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
>  [org.eclipse.jetty.util:12.0.23]    at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
>  [org.eclipse.jetty.util:12.0.23]     at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:195)
>  [org.eclipse.jetty.util:12.0.23]        at 
> org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:210) 
> [org.eclipse.jetty.http2.common:12.0.23]   at 
> org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:157) 
> [org.eclipse.jetty.http2.common:12.0.23]        at 
> org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:462)
>  [org.eclipse.jetty.http2.common:12.0.23]        at 
> org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99) 
> [org.eclipse.jetty.io:12.0.23]      at 
> org.eclipse.jetty.io.ssl.SslConnection$SslEndPoint.onFillable(SslConnection.java:612)
>  [org.eclipse.jetty.io:12.0.23] at 
> org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:413) 
> [org.eclipse.jetty.io:12.0.23]     at 
> org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:155) 
> [org.eclipse.jetty.io:12.0.23]    at 
> org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99) 
> [org.eclipse.jetty.io:12.0.23]      at 
> org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
>  [org.eclipse.jetty.io:12.0.23]       at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
>  [org.eclipse.jetty.util:12.0.23]        at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
>  [org.eclipse.jetty.util:12.0.23]    at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
>  [org.eclipse.jetty.util:12.0.23]     at 
> org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
>  [org.eclipse.jetty.util:12.0.23]    at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
>  [org.eclipse.jetty.util:12.0.23]    at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)
>  [org.eclipse.jetty.util:12.0.23]    at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)
>  [org.eclipse.jetty.util:12.0.23]  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)
>  [org.eclipse.jetty.util:12.0.23]       at 
> java.base/java.lang.Thread.run(Thread.java:840)Caused by: 
> javax.jcr.query.InvalidQueryException: java.text.ParseException: Query: 
> SELECT * FROM [sling:OsgiConfig] AS(*)s WHERE (ISDESCENDANTNODE([/apps]) OR 
> ISDESCENDANTNODE([/libs])) AND NAME(s) LIKE 
> 'org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended%' AND 
> [user.mapping] LIKE '%=enapps-games'; expected: unknown node type    at 
> org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl.executeQuery(QueryManagerImpl.java:149)
>  [org.apache.jackrabbit.oak-jcr:1.86.0]  at 
> org.apache.jackrabbit.oak.jcr.query.QueryImpl$2.perform(QueryImpl.java:104) 
> [org.apache.jackrabbit.oak-jcr:1.86.0]   at 
> org.apache.jackrabbit.oak.jcr.query.QueryImpl$2.perform(QueryImpl.java:100) 
> [org.apache.jackrabbit.oak-jcr:1.86.0]   at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:236)
>  [org.apache.jackrabbit.oak-jcr:1.86.0]      at 
> org.apache.jackrabbit.oak.jcr.query.QueryImpl.execute(QueryImpl.java:99) 
> [org.apache.jackrabbit.oak-jcr:1.86.0]      at 
> org.apache.sling.jcr.resource.internal.helper.JcrResourceUtil.query(JcrResourceUtil.java:61)
>  [org.apache.sling.jcr.resource:3.3.6]   at 
> org.apache.sling.jcr.resource.internal.helper.jcr.BasicQueryLanguageProvider.findResources(BasicQueryLanguageProvider.java:84)
>  [org.apache.sling.jcr.resource:3.3.6] ... 72 common frames omittedCaused by: 
> java.text.ParseException: Query: SELECT * FROM [sling:OsgiConfig] AS(*)s 
> WHERE (ISDESCENDANTNODE([/apps]) OR ISDESCENDANTNODE([/libs])) AND NAME(s) 
> LIKE 
> 'org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended%' AND 
> [user.mapping] LIKE '%=enapps-games'; expected: unknown node type at 
> org.apache.jackrabbit.oak.query.SQL2Parser.getSyntaxError(SQL2Parser.java:1445)
>  [org.apache.jackrabbit.oak-core:1.86.0]      at 
> org.apache.jackrabbit.oak.query.SQL2Parser.parseSelector(SQL2Parser.java:306) 
> [org.apache.jackrabbit.oak-core:1.86.0]        at 
> org.apache.jackrabbit.oak.query.SQL2Parser.parseSource(SQL2Parser.java:349) 
> [org.apache.jackrabbit.oak-core:1.86.0]  at 
> org.apache.jackrabbit.oak.query.SQL2Parser.parseSelect(SQL2Parser.java:257) 
> [org.apache.jackrabbit.oak-core:1.86.0]  at 
> org.apache.jackrabbit.oak.query.SQL2Parser.parse(SQL2Parser.java:158) 
> [org.apache.jackrabbit.oak-core:1.86.0]        at 
> org.apache.jackrabbit.oak.query.QueryEngineImpl.parseQuery(QueryEngineImpl.java:187)
>  [org.apache.jackrabbit.oak-core:1.86.0] at 
> org.apache.jackrabbit.oak.query.QueryEngineImpl.executeQuery(QueryEngineImpl.java:266)
>  [org.apache.jackrabbit.oak-core:1.86.0]       at 
> org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl.executeQuery(QueryManagerImpl.java:137)
>  [org.apache.jackrabbit.oak-jcr:1.86.0]  ... 78 common frames omitted {code}
>  
> UPDATE: new proposal after feedback and changes requested from the PR reviews:
> Utilize OSGi Config Admin API for reading/writing. I left the old way as a 
> fallback since I didn't see a convenient way to tell ConfiguationAdmin to 
> store the data in a specific location.
> A summary of the changed behavior is below:
>  # Use ConfigurationAdmin to find the OSGi configurations to display on the 
> service user details UI
> a) Also change the rendering of the configuration items to render a link to 
> the /system/console/configMgr/[pid] for each item
>  # Add a code path for using ConfigurationAdmin to store the configuration 
> state from the "Create Service User" form.
> a) Changed the "Application Path" field to now be optional. Also this field 
> now not rendered at all if the "sling:OsgiConfig" nodetype has not been 
> deployed since it doesn't make sense without JcrInstaller available.
> b) Added a new "Configuration Instance Identifier" field which defines the 
> suffix for the configuration PID. Previously this value came from the last 
> segment of the "Application Path" field which is now optional.
> So the new behavior is that if "Application Path" is empty or the 
> "sling:OsgiConfig" nodetype is not available, the configuration will be 
> applied by delegating to the ConfigurationAdmin APIs. Otherwise, when there 
> is a specific "Application Path" value supplied, the configuration will be 
> applied by persisting a configuration resource as it was before.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to