Internal server error: Cannot get property 'inputStream' on null object

This happens 100% when going into the settings (cog icon) then General settings->Customize (under locale)

after clicking this button Dashbord opens with all items losing their localized names

Fixes itself after service openboxes restart

This is most likely caused by the same issue preventing you from downloading the templates (Tomcat is unable to access certain files within the application).

Either there’s a simple file permission issue behind it OR there’s a fundamental problem with the way the standalone WAR (running the application within an embedded Tomcat process) handles resource files within the WAR file.

I can’t make any recommendations without seeing the output from the other thread, but eventually we might want to think about recreating your production environment using the “latest” version of the installation docs, which uses the standard approach of deploying the application to a standalone Tomcat instance.

I will try to replicate the issue locally when I get a chance.

Thanks

since i`m currently just evaluating the app, maybe you could share your opinion on what is the most trouble-free method of installation? I naively thought that Grails v3 version on the Ubuntu is the best option to go but seems that it might not be the case with the embedded Tomcat etc.

Is more recent Ubuntu server version not officially supported, only 18.04 - i have seen members of the community having some issues with 22.04?

Thanks for all the support and efforts answering all those questions in such a detailed and easy to understand manner - this is rare and very valuable nowadays.

since i`m currently just evaluating the app,

Ok phew.

maybe you could share your opinion on what is the most trouble-free method of installation?

I recommend using the installation instructions in the “beta” version of our v0.9.x docs.

The instructions should be close to complete and valid, but please review the following ticket for feedback that we received from a community member regarding errors they found.

I plan to incorporate that feedback as soon as I can. And I have been trying to polish and publish these docs for months but haven’t had time to make the final push to clean up the remaining holes and create videos for some migration workflows.

But this is what I would recommend to anyone trying to install a v0.9.x release.

Is more recent Ubuntu server version not officially supported, only 18.04 - i have seen members of the community having some issues with 22.04?

Yes, the instructions mentioned above target Ubuntu 22.04.

Note: I tried to install on Ubuntu 24.04, but OpenBoxes does not deploy on Tomcat 10, so I would avoid starting with 24.04 until we can test and add proper instructions. But, from what I understand, upgrading from 22.04 to 24.04 (after you have installed OpenBoxes) does not cause any problems.

Thanks for all the support and efforts answering all those questions in such a detailed and easy to understand manner - this is rare and very valuable nowadays.

It’s my pleasure. Interacting with the community, brainstorming solutions, and answering questions are my favorite parts of this project. So, thank you for your interest, thoughtful questions, and patience in dealing with the bugs and quirks.

1 Like

I was so close on 1st try but saw the pop-up and steered clear of it, mehhh

Thanks a lot, i will reinstall from scratch. Who knows, probably some of the bugs i have giscovered attribute to the specifics of integrated Tomcat

Had no issues installing according to this guide. This solved the issue with not being able to download templates (have commented in the original topic).

One question re this guide though: there is timezone in the datasource url - shouldn`t it be matched with the server timezone?

url: jdbc:mysql://localhost:3306/<database>?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC

Original bug ( “Internal server error” after clicking General settings->Customize (under locale list) ) is still present. What should this “Customize” button do anyway - switch to custom localization? Then it could be expected behavior since i have no custom localization made.

Thought it is worth mentioning: using standalone Tomcat installation path solved the issue with inconsistent page load times i have mentioned here when 1st load took like 5-6 seconds and subseqent loads took 0,001 seconds

Solved the issue with non-unicode characters shown as “?” in most parts of the app as well.

Looks like Grails v3 with integrated Tomcat should be avoided in the current state :slight_smile:
Sorry for wasting your time on wild goose chase.

PS:
There was a bunch of warnings during startup similar to
[2024-11-23 15:16:12] [warning] Unable to add the resource at [/WEB-INF/classes/requisition/_requisitionItems2.gsp] to the cache for web application [/openboxes] because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
Do they have to be addressed or can be ignored?

sorry for spamming with replies, but found couple issues in the closing part of the guide

  1. “…” in the VirtualHost config below produce error during check if pasted as a whole to the end of cfg file (the instruction explicitly says “add to the end of file”, not section). As far as i can see, it is Ok to have two <VirtualHost *:80> sections in the file, they pass the check and pasting would have worked without “…”
    I understand what was meant, but since it is about guide for people not familar with Apache configuration like myself…
<VirtualHost *:80>
    ...
    # Redirect requests for root context to /openboxes
    RedirectMatch ^/$ /openboxes/

    # Forward /openboxes requests to Tomcat
    ProxyPreserveHost On
    ProxyPass /openboxes http://127.0.0.1:8080/openboxes
    ProxyPassReverse /openboxes http://127.0.0.1:8080/openboxes
</VirtualHost>
  1. command for checking the configuration contains a typo - “t” instead of “e”
    apachtctl configtestapachectl configtest

Those can be ignored.

p.s. Apologies for missing this message back in November.

Regarding the Reverse Proxy instructions, thank you for the feedback on that.

  1. I’ll try to make the intent more explicit there.
  2. Thanks, will edit that now.

I’m having the same error on ubuntu 22.04 clean installation, how could you manage to overcome this error.

I’m having the same error on ubuntu 22.04 clean installation, how could you manage to overcome this error.

Hey @irzelindo How are you?

Can you clarify what you mean by “same error”? A screenshot and/or error log would be helpful. And can you also point me to the exact version of the installation document you used?

Justin

I followed the instructions on this link https://docs.openboxes.com/en/stable/admin-guide/installation/ and installed OpenBoxes on Ubuntu desktop version 22.04. After the installation, when I logged in, pop-ups appeared, and there were no labels on the dashboard cards. The error displays Internal server error: Cannot get property ‘inputStream’ on null object as shown in the image attached.


I’ve managed to check catalina.out logs, the error has to be with localization.

2025-05-29 14:05:36,729 INFO  [http-nio-8080-exec-9] org.pih.warehouse.core.UserService: Is role ROLE_SHIPMENT_NOTIFICATION in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,729 INFO  [http-nio-8080-exec-9] org.pih.warehouse.core.UserService: Is role ROLE_FINANCE in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,729 INFO  [http-nio-8080-exec-9] org.pih.warehouse.core.UserService: Is role ROLE_SUPERUSER in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = true
2025-05-29 14:05:36,729 INFO  [http-nio-8080-exec-10] org.pih.warehouse.core.UserService: Is role ROLE_SUPERUSER in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = true
2025-05-29 14:05:36,729 INFO  [http-nio-8080-exec-7] org.pih.warehouse.core.UserService: Is role ROLE_SUPERUSER in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = true
2025-05-29 14:05:36,741 ERROR [http-nio-8080-exec-10] StackTrace: Full Stack Trace:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
	at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:190)
	at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:46)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:299)
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.core.LocalizationService$getMessagesProperties$1.call(Unknown Source)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at io.sentry.spring.tracing.SentryTracingFilter.doFilterInternal(SentryTracingFilter.java:91)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at io.sentry.spring.SentrySpringFilter.doFilterInternal(SentrySpringFilter.java:76)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:656)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:935)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1792)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.lang.Thread.run(Thread.java:750)
2025-05-29 14:05:36,742 ERROR [http-nio-8080-exec-10] StackTrace: Full Stack Trace:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at io.sentry.spring.tracing.SentryTracingFilter.doFilterInternal(SentryTracingFilter.java:91)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121)
	at io.sentry.spring.SentrySpringFilter.doFilterInternal(SentrySpringFilter.java:76)
	at java.lang.Thread.run(Thread.java:750)
2025-05-29 14:05:36,744 ERROR [http-nio-8080-exec-9] StackTrace: Full Stack Trace:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
	at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:190)
	at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:46)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:299)
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.core.LocalizationService$getMessagesProperties$1.call(Unknown Source)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at io.sentry.spring.tracing.SentryTracingFilter.doFilterInternal(SentryTracingFilter.java:91)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at io.sentry.spring.SentrySpringFilter.doFilterInternal(SentrySpringFilter.java:76)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:656)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:935)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1792)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.lang.Thread.run(Thread.java:750)
2025-05-29 14:05:36,744 ERROR [http-nio-8080-exec-9] StackTrace: Full Stack Trace:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at io.sentry.spring.tracing.SentryTracingFilter.doFilterInternal(SentryTracingFilter.java:91)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121)
	at io.sentry.spring.SentrySpringFilter.doFilterInternal(SentrySpringFilter.java:76)
	at java.lang.Thread.run(Thread.java:750)
2025-05-29 14:05:36,746 ERROR [http-nio-8080-exec-10] o.g.web.errors.GrailsExceptionResolver: NullPointerException occurred when processing request: [GET] /openboxes/api/localizations
Cannot get property 'inputStream' on null object. Stacktrace follows:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at io.sentry.spring.tracing.SentryTracingFilter.doFilterInternal(SentryTracingFilter.java:91)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121)
	at io.sentry.spring.SentrySpringFilter.doFilterInternal(SentrySpringFilter.java:76)
	at java.lang.Thread.run(Thread.java:750)
2025-05-29 14:05:36,747 ERROR [http-nio-8080-exec-9] o.g.web.errors.GrailsExceptionResolver: NullPointerException occurred when processing request: [GET] /openboxes/api/localizations
Cannot get property 'inputStream' on null object. Stacktrace follows:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at io.sentry.spring.tracing.SentryTracingFilter.doFilterInternal(SentryTracingFilter.java:91)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121)
	at io.sentry.spring.SentrySpringFilter.doFilterInternal(SentrySpringFilter.java:76)
	at java.lang.Thread.run(Thread.java:750)
2025-05-29 14:05:36,753 DEBUG [http-nio-8080-exec-10] org.pih.warehouse.AccessLogInterceptor: /openboxes/errors/handleException [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,753 DEBUG [http-nio-8080-exec-9] org.pih.warehouse.AccessLogInterceptor: /openboxes/errors/handleException [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,754 DEBUG [http-nio-8080-exec-10] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/errors/handleException in 1 ms
2025-05-29 14:05:36,754 DEBUG [http-nio-8080-exec-9] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/errors/handleException in 1 ms
2025-05-29 14:05:36,836 DEBUG [http-nio-8080-exec-6] org.pih.warehouse.AccessLogInterceptor: /openboxes/api/dashboard/inProgressShipments [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,836 DEBUG [http-nio-8080-exec-3] org.pih.warehouse.AccessLogInterceptor: /openboxes/api/dashboard/incomingStock [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,836 DEBUG [http-nio-8080-exec-8] org.pih.warehouse.AccessLogInterceptor: /openboxes/api/dashboard/expirationSummary [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,836 DEBUG [http-nio-8080-exec-2] org.pih.warehouse.AccessLogInterceptor: /openboxes/api/dashboard/inventorySummary [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,836 DEBUG [http-nio-8080-exec-5] org.pih.warehouse.AccessLogInterceptor: /openboxes/api/dashboard/inventoryByLotAndBin [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,836 DEBUG [http-nio-8080-exec-4] org.pih.warehouse.AccessLogInterceptor: /openboxes/api/dashboard/receivingBin [user:admin, location:Main Warehouse]
2025-05-29 14:05:36,844 DEBUG [http-nio-8080-exec-2] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/api/dashboard/inventorySummary in 0 ms
2025-05-29 14:05:36,844 DEBUG [http-nio-8080-exec-4] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/api/dashboard/receivingBin in 0 ms
2025-05-29 14:05:36,844 DEBUG [http-nio-8080-exec-6] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/api/dashboard/inProgressShipments in 0 ms
2025-05-29 14:05:36,844 DEBUG [http-nio-8080-exec-5] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/api/dashboard/inventoryByLotAndBin in 0 ms
2025-05-29 14:05:36,844 DEBUG [http-nio-8080-exec-3] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/api/dashboard/incomingStock in 0 ms
2025-05-29 14:05:36,844 DEBUG [http-nio-8080-exec-8] org.pih.warehouse.SentryInterceptor: updated Sentry context for /openboxes/api/dashboard/expirationSummary in 0 ms
2025-05-29 14:05:36,845 INFO  [http-nio-8080-exec-2] org.pih.warehouse.RoleInterceptor: No rule for dashboardApi:getInventorySummary -> allow anonymous
2025-05-29 14:05:36,845 INFO  [http-nio-8080-exec-4] org.pih.warehouse.RoleInterceptor: No rule for dashboardApi:getReceivingBin -> allow anonymous
2025-05-29 14:05:36,845 INFO  [http-nio-8080-exec-8] org.pih.warehouse.RoleInterceptor: No rule for dashboardApi:getExpirationSummary -> allow anonymous
2025-05-29 14:05:36,845 INFO  [http-nio-8080-exec-3] org.pih.warehouse.RoleInterceptor: No rule for dashboardApi:getIncomingStock -> allow anonymous
2025-05-29 14:05:36,845 INFO  [http-nio-8080-exec-5] org.pih.warehouse.RoleInterceptor: No rule for dashboardApi:getInventoryByLotAndBin -> allow anonymous
2025-05-29 14:05:36,845 INFO  [http-nio-8080-exec-6] org.pih.warehouse.RoleInterceptor: No rule for dashboardApi:getInProgressShipments -> allow anonymous
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-8] org.pih.warehouse.core.UserService: Is role ROLE_PRODUCT_NOTIFICATION in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-5] org.pih.warehouse.core.UserService: Is role ROLE_SHIPMENT_NOTIFICATION in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-3] org.pih.warehouse.core.UserService: Is role ROLE_SHIPMENT_NOTIFICATION in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-4] org.pih.warehouse.core.UserService: Is role ROLE_SUPERUSER in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = true
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-8] org.pih.warehouse.core.UserService: Is role ROLE_SHIPMENT_NOTIFICATION in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-3] org.pih.warehouse.core.UserService: Is role ROLE_FINANCE in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-5] org.pih.warehouse.core.UserService: Is role ROLE_FINANCE in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-8] org.pih.warehouse.core.UserService: Is role ROLE_FINANCE in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false
2025-05-29 14:05:36,851 INFO  [http-nio-8080-exec-3] org.pih.warehouse.core.UserService: Is role ROLE_PRODUCT_NOTIFICATION in [ROLE_ADMIN, ROLE_SUPERUSER, ROLE_AUTHENTICATED, ROLE_MANAGER, ROLE_ASSISTANT, ROLE_BROWSER] = false

Very weird. Thanks for posting the stacktrace and screenshot.

The reason I asked for those is because the error from the original post was caused by using the Quickstart Guide (i.e. executing the WAR file with an embedded Tomcat instance). We haven’t had a chance to resolve that issue, so we just discourage people from using the Quickstart approach for now.

Based on the fact that you used the main installation docs (your logs appear to confirm that), the issue that you’re experiencing …

2025-05-29 14:05:36,746 ERROR [http-nio-8080-exec-10] o.g.web.errors.GrailsExceptionResolver: NullPointerException occurred when processing request: [GET] /openboxes/api/localizations
Cannot get property 'inputStream' on null object. Stacktrace follows:
java.lang.NullPointerException: Cannot get property 'inputStream' on null object
	at org.pih.warehouse.core.LocalizationService.getMessagesProperties(LocalizationService.groovy:73)
	at org.pih.warehouse.api.LocalizationApiController.list(LocalizationApiController.groovy:34)

… is probably a file permission issue.

I would check your Tomcat directory to ensure that all subdirectories and files are owned by the tomcat user.

In fact now I’m almost positive that’s the issue since I was able to reproduce the issue by changing the owner of all files under the openboxes webapp.

chown -R root:root /opt/tomcat/webapps/openboxes

You should be able to fix the issue by changing ownership to the Tomcat user.

chown -R tomcat:tomcat /opt/tomcat/webapps/openboxes

1 Like

Hi @jmiranda thanks for prompt response and sorry for the delay, I’ve managed to check permissions and even reinstalled the application still the error persists. check the evidence below.

Hi Irzelindo,

Try the following and revert:

  1. Stop the tomcat service. Delete the Openboxes directory under webapps directory and start the tomcat service again.

  2. If you have changed your locale, perhaps the specific file for your locale is not available in the directory /opt/tomcat/webapps/openboxes/WEB-INF/classes/

You can download it from github or copy one of the existing “messages_.properties” in that folder and rename it accordingly to your locale.

Stop and start tomcat and check your logs again. This will get rid of the error but you need to update the file with your language.

  1. Set your local in the properties file under /opt/tomcat/.grails/ . Either of these files will do but note that there is an order in which these files are loaded and the setting in the last file prevails. Ensure your locale file exists in the webapps directory above.

openboxes-config.properties

openboxes-config.groovy

application.properties

openboxes.yml

1 Like

Oooh that’s a great idea @Gideon. Thanks for sharing.

@irzelindo Just because the parent is owned by the tomcat doesn’t necessarily mean the underlying files are as well. So just double check that all of the i18n properties files are owened by tomcat.

root@vvgtest:~# ls -al /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages*.properties
-rw-r----- 1 tomcat tomcat 266856 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages.properties
-rw-r----- 1 tomcat tomcat 287008 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_ach.properties
-rw-r----- 1 tomcat tomcat 280506 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_ar.properties
-rw-r----- 1 tomcat tomcat 264826 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_cs.properties
-rw-r----- 1 tomcat tomcat 263160 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_de.properties
-rw-r----- 1 tomcat tomcat 286463 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_es.properties
-rw-r----- 1 tomcat tomcat    256 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_es_MX.properties
-rw-r----- 1 tomcat tomcat 263160 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_fi.properties
-rw-r----- 1 tomcat tomcat 290351 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_fr.properties
-rw-r----- 1 tomcat tomcat 263381 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_ht.properties
-rw-r----- 1 tomcat tomcat 263160 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_it.properties
-rw-r----- 1 tomcat tomcat 268725 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_nl.properties
-rw-r----- 1 tomcat tomcat 264165 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_pt.properties
-rw-r----- 1 tomcat tomcat 263160 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_rw.properties
-rw-r----- 1 tomcat tomcat 263160 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_sw.properties
-rw-r----- 1 tomcat tomcat 264653 Jun  2 12:38 /opt/tomcat/webapps/openboxes/WEB-INF/classes/messages_zh.properties
1 Like

Thanks for your suggestion @Gideon, I checked the i18n files


to confirm if they a owned by tomcat user or not, they seem to be. This particular computer I’m installing openboxes was set by default to Spanish regional language, so what I have done now to to switch it to english (us) and the errors disappeared, since this system is going to run in Paraguay, they may want to use Spanish as the main language. I can indeed switch to Spanish but at the moment I logout and login again the default language of openboxes switches automatically to English.