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