Thank you for that!
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 1:27 PM Sean Arms <sarms@xxxxxxxx> wrote:
> 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
>>>
>>>