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
>
>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wmsConfig SYSTEM
"http://www.unidata.ucar.edu/schemas/thredds/dtd/ncwms/wmsConfig_2_0.dtd">
<!--
Detailed configuration of the WMS service. This config file can be used to
set default styling parameters for each dataset/variable, and to enable or
disable
the GetFeatureInfo operation.
See
http://www.resc.reading.ac.uk/trac/myocean-tools/wiki/WmsDetailedConfiguration
for more information.
-->
<wmsConfig>
<global>
<!-- These settings apply to all datasets unless overridden below -->
<defaults>
<!-- The global defaults. All elements are mandatory -->
<allowFeatureInfo>true</allowFeatureInfo>
<defaultColorScaleRange>-50 50</defaultColorScaleRange>
<defaultPaletteName>rainbow</defaultPaletteName>
<defaultNumColorBands>20</defaultNumColorBands>
<logScaling>false</logScaling>
<intervalTime>false</intervalTime>
</defaults>
<standardNames>
<!-- Use this section to set defaults per standard name -->
<!-- Units must come from the UDUNITS vocabulary -->
<standardName name="sea_water_potential_temperature" units="K">
<defaultColorScaleRange>268 308</defaultColorScaleRange>
</standardName>
<standardName name="sea_water_temperature" units="K">
<defaultColorScaleRange>268 308</defaultColorScaleRange>
</standardName>
<standardName name="mass_concentration_of_chlorophyll_in_sea_water"
units="kg m-3">
<logScaling>true</logScaling>
</standardName>
<!-- TODO: how about allowing "*fraction" to map to 0:1? -->
<!-- TODO: how about allowing multiple standard names to map to the
same settings,
either through a glob expression or through a list? -->
</standardNames>
</global>
<overrides>
<datasetPath pathSpec="testAll/*eta_211.nc">
<!-- Will apply to all paths that match the path spec above -->
<pathDefaults>
<!-- These will apply to all variables in this path unless
overridden below -->
<allowFeatureInfo>false</allowFeatureInfo>
<defaultPaletteName>occam</defaultPaletteName>
</pathDefaults>
<variables>
<!-- Configure variables individually according to their
internal ID.
This is the most specific setting and will override any
others -->
<variable id="Z_sfc">
<defaultColorScaleRange>10 20</defaultColorScaleRange>
</variable>
</variables>
</datasetPath>
</overrides>
</wmsConfig>