David Nebinger created FELIX-5897:
-------------------------------------
Summary: org.apache.felix.http.proxy.ProxyServlet
NullPointerException
Key: FELIX-5897
URL: https://issues.apache.org/jira/browse/FELIX-5897
Project: Felix
Issue Type: Bug
Components: HTTP Service
Affects Versions: http.proxy-3.0.2
Reporter: David Nebinger
I have equinox embedded in a war, using http.proxy 3.0.2 to proxy traffic from
WAR context into OSGi container.
When deploying an updated WAR, all servlets including ProxyServlet will have
the destroy() method invoked.
An NPE will be generated by ProxyServlet if the servlet has not serviced any
requests:
{code:java}
03-Aug-2018 20:01:35.386 SEVERE
[ContainerBackgroundProcessor[StandardEngine[Catalina]]]
org.apache.catalina.core.ApplicationContext.log Servlet [proxy] threw unload()
exception
javax.servlet.ServletException: Servlet.destroy() for servlet [proxy] threw
exception
at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1312)
at
org.apache.catalina.core.StandardWrapper.stopInternal(StandardWrapper.java:1635)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
at
org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5466)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:845)
at org.apache.catalina.startup.HostConfig.undeploy(HostConfig.java:1433)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1341)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1619)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1166)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1390)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1394)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1362)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at org.apache.felix.http.proxy.ProxyServlet.destroy(ProxyServlet.java:132)
at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1301)
... 15 more
{code}
The relevant code is:
{code:java}
@Override
public void destroy()
{
this.tracker.close();
super.destroy();
}{code}
The ProxyServlet does a lazy call to doInit() on the first incoming service()
call. doInit() will create the tracker instance, otherwise this value is null.
The fix is to wrap the tracker.close() line with a check to see that the
tracker is not null before invoking the close() method.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)