Error when trying to create a notification template for a System Object from a custom service-builder module

Hi,

I’m trying to integrate a some custom entities created in a service builder module with Objects Framework, following this guide and digging around the source code.

The object definition appears in “Objects” section in the portal , but when I try to create a notification template, I got an error in the log when I choose my entity from the dropdown

The same error appear if I put this lines of code in the template

${ObjectEntry_status.getData()}
${ObjectEntry_partnerId.getData()}

and try to execute the Object Action (a simple “after update” action) related to the notification.

This is the stacktrace:

2026-02-09 16:35:55.673 ERROR [][][][PortletServlet:109] Unable to process portlet com_liferay_notification_web_internal_portlet_NotificationTemplatesPortlet: java.lang.NullPointerException: Cannot invoke "com.liferay.info.item.provider.InfoItemFormProvider.getInfoForm(String, long)" because "infoItemFormProvider" is null

javax.portlet.PortletException: java.lang.NullPointerException: Cannot invoke "com.liferay.info.item.provider.InfoItemFormProvider.getInfoForm(String, long)" because "infoItemFormProvider" is null

	at com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCResourceCommand.serveResource(BaseMVCResourceCommand.java:40) ~[portal-kernel.jar:?]

	at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.callResourceMethod(MVCPortlet.java:453) ~[portal-kernel.jar:?]

	at com.liferay.portal.kernel.portlet.LiferayPortlet.serveResource(LiferayPortlet.java:137) ~[portal-kernel.jar:?]

	at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.serveResource(MVCPortlet.java:357) ~[portal-kernel.jar:?]

	at com.liferay.portlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:137) ~[portal-impl.jar:?]

	at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:79) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:131) ~[portal-impl.jar:?]

	at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:69) ~[portal-kernel.jar:?]

	at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:105) ~[portal-kernel.jar:?]

	at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[servlet-api.jar:4.0.FR]

	at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:147) ~[?:?]

	at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:63) ~[?:?]

	at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:120) ~[?:?]

	at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.forward(RequestDispatcherAdaptor.java:40) ~[?:?]

	at com.liferay.portlet.internal.InvokerPortletImpl.invoke(InvokerPortletImpl.java:558) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.InvokerPortletImpl.invokeResource(InvokerPortletImpl.java:673) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.InvokerPortletImpl.serveResource(InvokerPortletImpl.java:486) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.PortletContainerImpl._serveResource(PortletContainerImpl.java:1055) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.PortletContainerImpl.lambda$serveResource$4(PortletContainerImpl.java:258) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.PortletContainerImpl._preserveGroupIds(PortletContainerImpl.java:402) ~[portal-impl.jar:?]

	at com.liferay.portlet.internal.PortletContainerImpl.serveResource(PortletContainerImpl.java:251) ~[portal-impl.jar:?]

	at com.liferay.portlet.SecurityPortletContainerWrapper.serveResource(SecurityPortletContainerWrapper.java:190) ~[portal-impl.jar:?]

	at com.liferay.portlet.RestrictPortletContainerWrapper.serveResource(RestrictPortletContainerWrapper.java:141) ~[portal-impl.jar:?]

	at com.liferay.portal.kernel.portlet.PortletContainerUtil.serveResource(PortletContainerUtil.java:223) ~[portal-kernel.jar:?]

	at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:403) ~[portal-impl.jar:?]

	at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:165) ~[portal-impl.jar:?]

	at com.liferay.portal.struts.PortalRequestProcessor._process(PortalRequestProcessor.java:377) ~[portal-impl.jar:?]

	at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:143) ~[portal-impl.jar:?]

The same situation happens if I choose the native “Organization” entity from the dropdown.

Is this a known bug?

Hello @stendafe,

I performed the following steps on a clean bundle 2024.Q4.4, and observed the same behavior:

  1. Navigate to Templates under Notifications.
  2. Create a new template type Email.
  3. Provide Basic Info, Settings.
  4. Now, provide the Subject and change the Editor Type to ‘FreeMarker Template’.
  5. Change the entity to ‘Organization’ or anything.
  6. Save.

Results: The following error appears in the console, and after saving, it again asks the user to ‘Select an Option’.

2026-02-11 10:04:54.184 ERROR [http-nio-8080-exec-7][PortletServlet:109] Unable to process portlet com_liferay_notification_web_internal_portlet_NotificationTemplatesPortlet: java.lang.NullPointerException: Cannot invoke “com.liferay.info.item.provider.InfoItemFormProvider.getInfoForm(String, long)” because “infoItemFormProvider” is null
jakarta.portlet.PortletException: java.lang.NullPointerException: Cannot invoke “com.liferay.info.item.provider.InfoItemFormProvider.getInfoForm(String, long)” because “infoItemFormProvider” is null
at com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCResourceCommand.serveResource(BaseMVCResourceCommand.java:40) ~[portal-kernel.jar:?]
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.callResourceMethod(MVCPortlet.java:453) ~[portal-kernel.jar:?]
at com.liferay.portal.kernel.portlet.LiferayPortlet.serveResource(LiferayPortlet.java:137) ~[portal-kernel.jar:?]
at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.serveResource(MVCPortlet.java:357) ~[portal-kernel.jar:?]
at com.liferay.portlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:137) ~[portal-impl.jar:?]
at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:79) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:131) ~[portal-impl.jar:?]
at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:69) ~[portal-kernel.jar:?]
at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:105) ~[portal-kernel.jar:?]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[servlet-api.jar:6.0]
at com.liferay.portal.osgi.web.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:170) ~[?:?]
at com.liferay.portal.osgi.web.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:99) ~[?:?]
at com.liferay.portal.osgi.web.http.servlet.internal.context.LiferayDispatchTargets.doDispatch(LiferayDispatchTargets.java:177) ~[?:?]
at com.liferay.portal.osgi.web.http.servlet.internal.servlet.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:40) ~[?:?]
at com.liferay.portlet.internal.InvokerPortletImpl.invoke(InvokerPortletImpl.java:558) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.InvokerPortletImpl.invokeResource(InvokerPortletImpl.java:673) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.InvokerPortletImpl.serveResource(InvokerPortletImpl.java:486) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.PortletContainerImpl._serveResource(PortletContainerImpl.java:1055) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.PortletContainerImpl.lambda$serveResource$4(PortletContainerImpl.java:258) ~[portal-impl.jar:?]
at com.liferay.portlet.internal.PortletContainerImpl._preserveGroupIds(PortletContainerImpl.java:402) [portal-impl.jar:?]
at com.liferay.portlet.internal.PortletContainerImpl.serveResource(PortletContainerImpl.java:251) [portal-impl.jar:?]
at com.liferay.portlet.SecurityPortletContainerWrapper.serveResource(SecurityPortletContainerWrapper.java:190) [portal-impl.jar:?]
at com.liferay.portlet.RestrictPortletContainerWrapper.serveResource(RestrictPortletContainerWrapper.java:141) [portal-impl.jar:?]
at com.liferay.portal.kernel.portlet.PortletContainerUtil.serveResource(PortletContainerUtil.java:223) [portal-kernel.jar:?]
at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:407) [portal-impl.jar:?]
at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:169) [portal-impl.jar:?]

To verify this, I raised the bug here: Jira; hence, kindly refer to this for further updates.

Thanks a lot @Pooja_Bhambani , I’ll track the jira issue