This issue has been created
There are 2 updates, 2 comments.
 
 
XWiki Platform / cid:jira-generated-image-avatar-84f7943a-f769-458f-b2ed-2c67d83901c5 XWIKI-23523 Open

Livedata crash with NPE when used with custom data source

 
View issue   ·   Add comment
 

Issue created

 
cid:jira-generated-image-avatar-fa83d0c4-2034-4244-8ec2-a29833abe334 Josué Tille created this issue on 12/Sep/25 11:18
 
Summary: Livedata broken with custom data source
Issue Type: cid:jira-generated-image-avatar-84f7943a-f769-458f-b2ed-2c67d83901c5 Bug
Affects Versions: 16.10.10, 17.4.3, 17.6.0
Assignee: Unassigned
Components: Live Data
Created: 12/Sep/25 11:18
Priority: cid:jira-generated-image-static-major-aa1d39ea-6a8f-4fe0-acaf-00d484030c03 Major
Reporter: Josué Tille
Description:

 Step to reproduce:

  • Create a custom LiveDataSource.
  • Create a page with this code
{{liveData}}
{
  "meta": {
    "propertyTypes": [
      {
        "filter": "text",
        "filterable": true,
        "editable": true,
        "id": "String",
        "sortable": true
      }
    ],
    "propertyDescriptors": [
      {
        "filterable": true,
        "editable": false,
        "name": "Datacenter",
        "id": "datacenter",
        "sortable": true,
        "type": "String"
      }
    ]
  },
  "query": {
    "source": {
      "id": "customDataSource"
    },
    "properties": [
      "xxx"
    ]
  }
}
{{/liveData}}

Expected:

The content is show
 

2025-09-12 10:19:29.267:WARN :oejes.ServletChannel:qtp1586845078-799: /xwiki/rest/liveData/sources/jsonTable/entries

jakarta.servlet.ServletException: javax.servlet.ServletException: java.lang.NullPointerException: Cannot invoke "org.xwiki.livedata.LiveDataMeta.getLayouts()" because the return value of "org.xwiki.livedata.LiveDataConfiguration.getMeta
()" is null

        at org.xwiki.rest.jersey.internal.JerseyServletContainer.service(JerseyServletContainer.java:141)

        at org.xwiki.rest.jersey.internal.XWikiRESTServlet.service(XWikiRESTServlet.java:95)

        at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)

        at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)

        at com.xpn.xwiki.web.XWikiContextInitializationFilter.doFilter(XWikiContextInitializationFilter.java:72)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:66)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:135)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:212)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SafeRedirectFilter.doFilter(SafeRedirectFilter.java:106)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.ResolveRelativeRedirectFilter.doFilter(ResolveRelativeRedirectFilter.java:129)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:120)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.eclipse.jetty.ee10.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:195)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)

        at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)

        at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)

        at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)

        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

        at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

        at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)

        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:181)

        at org.eclipse.jetty.server.Server.handle(Server.java:182)

        at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:665)

        at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)

        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)

        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)

        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)

        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)

        at java.base/java.lang.Thread.run(Thread.java:840)

Caused by:  
javax.servlet.ServletException: java.lang.NullPointerException: Cannot invoke "org.xwiki.livedata.LiveDataMeta.getLayouts()" because the return value of "org.xwiki.livedata.LiveDataConfiguration.getMeta()" is null

        at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:412)

        at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:349)

        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:379)

        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:312)

        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)

        at org.xwiki.rest.jersey.internal.JerseyServletContainer.service(JerseyServletContainer.java:139)

        at org.xwiki.rest.jersey.internal.XWikiRESTServlet.service(XWikiRESTServlet.java:95)

        at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)

        at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)

        at com.xpn.xwiki.web.XWikiContextInitializationFilter.doFilter(XWikiContextInitializationFilter.java:72)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:66)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:135)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:212)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SafeRedirectFilter.doFilter(SafeRedirectFilter.java:106)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.ResolveRelativeRedirectFilter.doFilter(ResolveRelativeRedirectFilter.java:129)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:120)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.eclipse.jetty.ee10.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:195)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)

        at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)

        at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)

        at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)

        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

        at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

        at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)

        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:181)

        at org.eclipse.jetty.server.Server.handle(Server.java:182)

        at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:665)

        at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)

        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)

        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)

        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)

        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)

        at java.base/java.lang.Thread.run(Thread.java:840)

Caused by:  
java.lang.NullPointerException: Cannot invoke "org.xwiki.livedata.LiveDataMeta.getLayouts()" because the return value of "org.xwiki.livedata.LiveDataConfiguration.getMeta()" is null

        at org.xwiki.livedata.internal.DefaultLiveDataConfigurationResolver.mergeBaseConfig(DefaultLiveDataConfigurationResolver.java:119)

        at org.xwiki.livedata.internal.DefaultLiveDataConfigurationResolver.resolve(DefaultLiveDataConfigurationResolver.java:80)

        at org.xwiki.livedata.internal.DefaultLiveDataConfigurationResolver.resolve(DefaultLiveDataConfigurationResolver.java:60)

        at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.getConfig(DefaultLiveDataEntriesResource.java:119)

        at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.initConfig(DefaultLiveDataEntriesResource.java:188)

        at org.xwiki.livedata.internal.rest.DefaultLiveDataEntriesResource.getEntries(DefaultLiveDataEntriesResource.java:76)

        at jdk.internal.reflect.GeneratedMethodAccessor635.invoke(Unknown Source)

        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.base/java.lang.reflect.Method.invoke(Method.java:569)

        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)

        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)

        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)

        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)

        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)

        at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)

        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)

        at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)

        at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:256)

        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)

        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)

        at org.glassfish.jersey.internal.Errors.process(Errors.java:292)

        at org.glassfish.jersey.internal.Errors.process(Errors.java:274)

        at org.glassfish.jersey.internal.Errors.process(Errors.java:244)

        at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)

        at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235)

        at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684)

        at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:397)

        at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:349)

        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:379)

        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:312)

        at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)

        at org.xwiki.rest.jersey.internal.JerseyServletContainer.service(JerseyServletContainer.java:139)

        at org.xwiki.rest.jersey.internal.XWikiRESTServlet.service(XWikiRESTServlet.java:95)

        at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)

        at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)

        at com.xpn.xwiki.web.XWikiContextInitializationFilter.doFilter(XWikiContextInitializationFilter.java:72)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:66)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:135)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:212)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SafeRedirectFilter.doFilter(SafeRedirectFilter.java:106)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.ResolveRelativeRedirectFilter.doFilter(ResolveRelativeRedirectFilter.java:129)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:120)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.eclipse.jetty.ee10.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:195)

        at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)

        at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)

        at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)

        at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)

        at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)

        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

        at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

        at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)

        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:181)

        at org.eclipse.jetty.server.Server.handle(Server.java:182)

        at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:665)

        at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)

        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)

        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)

        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)

        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)

        at java.base/java.lang.Thread.run(Thread.java:840) 
 
 

2 updates

 
cid:jira-generated-image-avatar-fa83d0c4-2034-4244-8ec2-a29833abe334 Changes by Josué Tille on 12/Sep/25 11:19
 
Summary: Livedata broken crash with NPE when used with custom data source
Assignee: Josué Tille
 
 

2 comments

 
cid:jira-generated-image-avatar-fa83d0c4-2034-4244-8ec2-a29833abe334 Josué Tille on 12/Sep/25 11:26
 

After investigating it seem to crash at this line because config.meta is null.

It seem that if the source provider implement a LiveDataConfigurationResolver we might not have this issue because the config is modified here. But in my case we just return the config. And initially the config is created without setting the meta field.

 
cid:jira-generated-image-avatar-fa83d0c4-2034-4244-8ec2-a29833abe334 Josué Tille on 12/Sep/25 11:27
 
After investigating it seem to crash [at this line|https://github.com/xwiki/xwiki-platform/blob/ecaace4091984426e3faee382699a6ee544e3ece/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java#L119] because {{config.meta}} is null.

It seem that if the source provider implement a {{LiveDataConfigurationResolver}} we might not have this issue because the config is modified [here|https://github.com/xwiki/xwiki-platform/blob/ecaace4091984426e3faee382699a6ee544e3ece/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java#L97]. But in my case [we just return the config|https://github.com/xwiki/xwiki-platform/blob/ecaace4091984426e3faee382699a6ee544e3ece/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java#L102]. And initially the config is created [without setting the meta field|https://github.com/xwiki/xwiki-platform/blob/187e5459fa31df7d0dc9d4e0fef22418a027921f/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-rest/src/main/java/org/xwiki/livedata/internal/rest/DefaultLiveDataEntriesResource.java#L117]
, so it's why we end with a NPE .