Re: [thredds] THREDDS 5.6 WMS Servlet Error: NullPointerException on newSettings Field

  • To: Evan Magri - NOAA Affiliate <evan.magri@xxxxxxxx>
  • Subject: Re: [thredds] THREDDS 5.6 WMS Servlet Error: NullPointerException on newSettings Field
  • From: Sean Arms <sarms@xxxxxxxx>
  • Date: Wed, 9 Apr 2025 11:27:02 -0600
Greeting Evan,

I see what is happening now. I exposed some new default WMS config options
that were available in edal-java but not yet used by the TDS. As a result,
the wmsConfig.xml file needs to be modified to include the new options in
the default section. The new default section that ships with the TDS looks
like this:

<defaults>
    <!-- The global defaults. All elements are mandatory -->
    <allowFeatureInfo>true</allowFeatureInfo>
    <defaultColorScaleRange>-50 50</defaultColorScaleRange>
    <defaultAboveMaxColor>#000000</defaultAboveMaxColor>
    <defaultBelowMinColor>#000000</defaultBelowMinColor>
    <defaultNoDataColor>extend</defaultNoDataColor>
    <defaultOpacity>100</defaultOpacity>
    <defaultPaletteName>psu-viridis</defaultPaletteName>
    <defaultNumColorBands>20</defaultNumColorBands>
    <logScaling>false</logScaling>
    <!--Deprecated: intervalTime (does not work, to be removed in v6)-->
    <intervalTime>false</intervalTime>
</defaults>

If you have not modified anything in your current wmsConfig.xml, you may
delete it and restart the TDS, which will cause a new, updated version of
the default config to be created.

I will modify the release notes on github and the docs to call this
important update step for those using wms - my apologies. Note that you
also may need to remove the projection database files as part of the
upgrade to 5.6 (${tds.content.root.path}/thredds/cache/edal-java/epsg/.h2),
which is related to an incompatible upstream change.

Cheers,

Sean


On Wed, Apr 9, 2025 at 10:56 AM Evan Magri - NOAA Affiliate <
evan.magri@xxxxxxxx> wrote:

> Hey Sean,
>
> I've attached the wmsConfig.xml
>
> Regards,
>
> Evan Magri, IT/Computer Specialist II, Systems Administrator
> Contractor - Team Alpha Omega for NCEI Data Stewardship
> NOAA's National Centers for Environmental Information (NCEI)
> NCEI Data Stewardship Division/Data Access Branch
> 151 Patton Avenue, Asheville, NC 28801 (E/NE54)
> E-mail: evan.magri@xxxxxxxx
> Google Voice: (828) 271-4019‬
>
>
> On Wed, Apr 9, 2025 at 12:42 PM Ernie Joynt - NOAA Affiliate <
> ernie.joynt@xxxxxxxx> wrote:
>
>> From tomcat log
>>
>> 9-Apr-2025 15:12:20.094 SEVERE [ajp-nio-140.172.190.31-8009-exec-17]
>> org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for
>> servlet [wms] in context with path [/thredds##5.6] threw exception
>>
>>         java.io.IOException: java.lang.NullPointerException: Cannot read
>> field "allowFeatureInfo" because "newSettings" is null
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.WmsServlet.doGet(WmsServlet.java:338)
>>
>>                 at
>> jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
>>
>>                 at
>> jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>>
>>                 at
>> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365)
>>
>>                 at
>> thredds.servlet.filter.RequestBracketingLogMessageFilter.doFilter(RequestBracketingLogMessageFilter.java:50)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
>>
>>                 at
>> thredds.servlet.filter.RequestQueryFilter.doFilter(RequestQueryFilter.java:90)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
>>
>>                 at
>> thredds.servlet.filter.HttpHeadFilter.doFilter(HttpHeadFilter.java:47)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
>>
>>                 at
>> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
>>
>>                 at
>> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
>>
>>                 at
>> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>>
>>                 at
>> org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:70)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
>>
>>                 at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>>
>>                 at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
>>
>>                 at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
>>
>>                 at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
>>
>>                 at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
>>
>>                 at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
>>
>>                 at
>> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663)
>>
>>                 at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
>>
>>                 at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
>>
>>                 at
>> org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:431)
>>
>>                 at
>> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
>>
>>                 at
>> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
>>
>>                 at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
>>
>>                 at
>> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
>>
>>                 at
>> org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
>>
>>                 at
>> org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
>>
>>                 at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
>>
>>                 at java.base/java.lang.Thread.run(Thread.java:840)
>>
>>         Caused by: java.lang.NullPointerException: Cannot read field
>> "allowFeatureInfo" because "newSettings" is null
>>
>>                 at
>> thredds.server.wms.config.LayerSettings.replaceNullValues(LayerSettings.java:215)
>>
>>                 at
>> thredds.server.wms.config.WmsDetailedConfig.getSettings(WmsDetailedConfig.java:200)
>>
>>                 at
>> thredds.server.wms.TdsEnhancedVariableMetadata.<init>(TdsEnhancedVariableMetadata.java:45)
>>
>>                 at
>> thredds.server.wms.ThreddsWmsCatalogue.getLayerMetadata(ThreddsWmsCatalogue.java:423)
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.util.WmsUtils.getLayerMetadata(WmsUtils.java:285)
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.GetMapStyleParams.<init>(GetMapStyleParams.java:182)
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.GetMapParameters.<init>(GetMapParameters.java:97)
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.WmsServlet.getMap(WmsServlet.java:410)
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.WmsServlet.dispatchWmsRequest(WmsServlet.java:365)
>>
>>                 at
>> thredds.server.wms.ThreddsWmsServlet.dispatchWmsRequest(ThreddsWmsServlet.java:127)
>>
>>                 at
>> uk.ac.rdg.resc.edal.wms.WmsServlet.doGet(WmsServlet.java:300)
>>
>>                 ... 41 more
>>
>>
>>
>> From threddsServlet.2025-04-09-15.log
>>
>>
>> 2025-04-09T15:12:20.094 +0000 [  97647680][   35059] INFO  -
>> threddsServlet - Remote host: 205.193.114.245 - Request: "GET
>> /thredds/wms/regional/
>> british_columbia_3_msl_2013.nc?LAYERS=Band1&ELEVATION=0&TIME=2022-08-05T13%3A22%3A27Z&TRANSPARENT=true&STYLES=boxfill%2Frainbow&COLORSCALERANGE=-500%2C0&NUMCOLORBANDS=20&LOGSCALE=false&SERVICE=WMS&VERSION=1.1&service=WMS&request=GetMap&layers=Band1&styles=&format=image%2Fpng&transparent=true&version=1.3.0&width=256&height=256&crs=EPSG%3A3857&bbox=-14010601.536559667,6261721.357121641,-13971465.778077658,6300857.115603653
>> HTTP/1.1"
>>
>> 2025-04-09T15:12:20.094 +0000 [  97647680][   35059] ERROR -
>> uk.ac.rdg.resc.edal.wms.WmsServlet - Problem with GET request
>>
>> java.lang.NullPointerException: Cannot read field "allowFeatureInfo"
>> because "newSettings" is null
>>
>>         at
>> thredds.server.wms.config.LayerSettings.replaceNullValues(LayerSettings.java:215)
>> ~[classes/:5.6]
>>
>>         at
>> thredds.server.wms.config.WmsDetailedConfig.getSettings(WmsDetailedConfig.java:200)
>> ~[classes/:5.6]
>>
>>         at
>> thredds.server.wms.TdsEnhancedVariableMetadata.<init>(TdsEnhancedVariableMetadata.java:45)
>> ~[classes/:5.6]
>>
>>         at
>> thredds.server.wms.ThreddsWmsCatalogue.getLayerMetadata(ThreddsWmsCatalogue.java:423)
>> ~[classes/:5.6]
>>
>>         at
>> uk.ac.rdg.resc.edal.wms.util.WmsUtils.getLayerMetadata(WmsUtils.java:285)
>> ~[edal-wms-1.5.3.0.jar:?]
>>
>>         at
>> uk.ac.rdg.resc.edal.wms.GetMapStyleParams.<init>(GetMapStyleParams.java:182)
>> ~[edal-wms-1.5.3.0.jar:?]
>>
>>         at
>> uk.ac.rdg.resc.edal.wms.GetMapParameters.<init>(GetMapParameters.java:97)
>> ~[edal-wms-1.5.3.0.jar:?]
>>
>>         at uk.ac.rdg.resc.edal.wms.WmsServlet.getMap(WmsServlet.java:410)
>> ~[edal-wms-1.5.3.0.jar:?]
>>
>>         at
>> uk.ac.rdg.resc.edal.wms.WmsServlet.dispatchWmsRequest(WmsServlet.java:365)
>> ~[edal-wms-1.5.3.0.jar:?]
>>
>>         at
>> thredds.server.wms.ThreddsWmsServlet.dispatchWmsRequest(ThreddsWmsServlet.java:127)
>> ~[classes/:5.6]
>>
>>         at uk.ac.rdg.resc.edal.wms.WmsServlet.doGet(WmsServlet.java:300)
>> ~[edal-wms-1.5.3.0.jar:?]
>>
>>         at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
>> ~[servlet-api.jar:6.0]
>>
>>         at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
>> ~[servlet-api.jar:6.0]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
>> ~[catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>> ~[catalina.jar:10.1.34]
>>
>>         at
>> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>> ~[tomcat-websocket.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
>> ~[catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>> ~[catalina.jar:10.1.34]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
>> ~[spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365)
>> [spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> thredds.servlet.filter.RequestBracketingLogMessageFilter.doFilter(RequestBracketingLogMessageFilter.java:50)
>> [classes/:5.6]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
>> [spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> thredds.servlet.filter.RequestQueryFilter.doFilter(RequestQueryFilter.java:90)
>> [classes/:5.6]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
>> [spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> thredds.servlet.filter.HttpHeadFilter.doFilter(HttpHeadFilter.java:47)
>> [classes/:5.6]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
>> [spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
>> [spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
>> [spring-security-web-6.3.4.jar:6.3.4]
>>
>>         at
>> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
>> [spring-web-6.1.14.jar:6.1.14]
>>
>>         at
>> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
>> [spring-web-6.1.14.jar:6.1.14]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:70)
>> [log4j-jakarta-web-2.23.1.jar:2.23.1]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
>> [catalina.jar:10.1.34]
>>
>>         at
>> org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:431)
>> [tomcat-coyote.jar:10.1.34]
>>
>>         at
>> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
>> [tomcat-coyote.jar:10.1.34]
>>
>>         at
>> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
>> [tomcat-coyote.jar:10.1.34]
>>
>>         at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
>> [tomcat-coyote.jar:10.1.34]
>>
>>         at
>> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
>> [tomcat-coyote.jar:10.1.34]
>>
>>         at
>> org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
>> [tomcat-util.jar:10.1.34]
>>
>>         at
>> org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
>> [tomcat-util.jar:10.1.34]
>>
>>         at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
>> [tomcat-util.jar:10.1.34]
>>
>>         at java.lang.Thread.run(Thread.java:840) [?:?]
>>
>>
>> On Apr 9, 2025, at 10:24 AM, Sean Arms <sarms@xxxxxxxx> wrote:
>>
>> Greetings Evan!
>>
>> This is the first time I've seen this particular error, but I see at
>> least one spot in the code that might end up with a null value for the
>> newSettings object. Do you see any errors in the TDS logs with more details
>> (threddsServlet logs), perhaps with a stacktrace? Could I also get a copy
>> of your wmsConfig.xml file (${tds.content.root.path}/thredds/wmsConfig.xml)?
>>
>> Cheers!
>>
>> Sean
>>
>>
>> On Wed, Apr 9, 2025 at 9:33 AM Evan Magri - NOAA Affiliate <
>> evan.magri@xxxxxxxx> wrote:
>>
>>> Good morning,
>>>
>>> I'm encountering a persistent error in our THREDDS 5.6 deployment. The
>>> servlet is throwing a NullPointerException, and the WMS functionality is
>>> not working as expected.
>>>
>>> Here's the relevant error from the Tomcat logs:
>>> 03-Apr-2025 16:34:19.346 SEVERE [ajp-nio-140.172.190.31-8009-exec-22]
>>> org.apache.catalina.core.StandardWrapperValve.invoke
>>> Servlet.service() for servlet [wms] in context with path [/thredds##5.6]
>>> threw exception
>>>     java.io.IOException: java.lang.NullPointerException: Cannot read
>>> field "allowFeatureInfo" because "newSettings" is null
>>>
>>> Could you please provide guidance on what might be causing the
>>> newSettings object to be null in this case?
>>>
>>> Thank you for your help, and please let me know if you need additional
>>> configuration details or logs.
>>>
>>> Regards,
>>>
>>> Evan Magri, IT/Computer Specialist II, Systems Administrator
>>> Contractor - Team Alpha Omega for NCEI Data Stewardship
>>> NOAA's National Centers for Environmental Information (NCEI)
>>> NCEI Data Stewardship Division/Data Access Branch
>>> 151 Patton Avenue, Asheville, NC 28801 (E/NE54)
>>> E-mail: evan.magri@xxxxxxxx
>>> Google Voice: (828) 271-4019‬
>>> _______________________________________________
>>> NOTE: All exchanges posted to Unidata maintained email lists are
>>> recorded in the Unidata inquiry tracking system and made publicly
>>> available through the web.  Users who post to any of the lists we
>>> maintain are reminded to remove any personal information that they
>>> do not want to be made public.
>>>
>>>
>>> thredds mailing list
>>> thredds@xxxxxxxxxxxxxxxx
>>> For list information or to unsubscribe,  visit:
>>> https://www.unidata.ucar.edu/mailing_lists/
>>>
>>
>> ----
>> Ernest H. Joynt, III
>> System Administrator
>> Contractor – Team Alpha Omega
>> NOAA's National Centers for Environmental Information (NCEI)
>> NCEI Mission Support Division / IT Operations Branch
>> 325 Broadway E/NE71
>> Boulder, CO 80305
>>
>> E: ernie.joynt@xxxxxxxx
>> V: 720.446.9152
>>
>>
  • 2025 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the thredds archives: