You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fs...@apache.org on 2015/01/12 16:29:48 UTC

svn commit: r1651120 - in /tomcat/trunk: java/org/apache/catalina/ha/context/ReplicatedContext.java test/org/apache/catalina/ha/ test/org/apache/catalina/ha/context/ test/org/apache/catalina/ha/context/TestReplicatedContext.java webapps/docs/changelog.xml

Author: fschumacher
Date: Mon Jan 12 15:29:47 2015
New Revision: 1651120

URL: http://svn.apache.org/r1651120
Log:
Don't add orderedLibs attribute if it is null.
ReplicatedContext will fail otherwise.

Avoid NPE on shutdown of ReplicatedContext.

Added:
    tomcat/trunk/test/org/apache/catalina/ha/
    tomcat/trunk/test/org/apache/catalina/ha/context/
    tomcat/trunk/test/org/apache/catalina/ha/context/TestReplicatedContext.java
Modified:
    tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java?rev=1651120&r1=1651119&r2=1651120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java Mon Jan 12 15:29:47 2015
@@ -83,13 +83,15 @@ public class ReplicatedContext extends S
     @Override
     protected synchronized void stopInternal() throws LifecycleException {
 
+        Map<String, Object> map = ((ReplApplContext) this.context)
+                .getAttributeMap();
+
         super.stopInternal();
 
-        Map<String,Object> map =
-                ((ReplApplContext)this.context).getAttributeMap();
         if (map instanceof ReplicatedMap) {
-            ((ReplicatedMap<?,?>)map).breakdown();
+            ((ReplicatedMap<?, ?>) map).breakdown();
         }
+
     }
 
 
@@ -160,6 +162,13 @@ public class ReplicatedContext extends S
 
         @Override
         public void setAttribute(String name, Object value) {
+            if (name == null) {
+                throw new IllegalArgumentException(sm.getString("applicationContext.setAttribute.namenull"));
+            }
+            if (value == null) {
+                removeAttribute(name);
+                return;
+            }
             if ( (!getParent().getState().isAvailable()) || "org.apache.jasper.runtime.JspApplicationContextImpl".equals(name) ){
                 tomcatAttributes.put(name,value);
             } else

Added: tomcat/trunk/test/org/apache/catalina/ha/context/TestReplicatedContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/ha/context/TestReplicatedContext.java?rev=1651120&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/ha/context/TestReplicatedContext.java (added)
+++ tomcat/trunk/test/org/apache/catalina/ha/context/TestReplicatedContext.java Mon Jan 12 15:29:47 2015
@@ -0,0 +1,56 @@
+package org.apache.catalina.ha.context;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.util.buf.ByteChunk;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestReplicatedContext extends TomcatBaseTest {
+
+    @Test
+    public void testBug57425() throws LifecycleException, IOException, ServletException {
+        Tomcat tomcat = getTomcatInstance();
+        Host host = tomcat.getHost();
+        if (host instanceof StandardHost) {
+            ((StandardHost) host).setContextClass(ReplicatedContext.class.getName());
+        }
+
+        File root = new File("test/webapp");
+        Context context = tomcat.addWebapp(host, "", "", root.getAbsolutePath());
+
+        Tomcat.addServlet(context, "test", new AccessContextServlet());
+        context.addServletMapping("/access", "test");
+
+        tomcat.start();
+
+        ByteChunk result = getUrl("http://localhost:" + getPort() + "/access");
+
+        Assert.assertEquals("OK", result.toString());
+
+    }
+
+    private static class AccessContextServlet extends HttpServlet {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+                throws ServletException, IOException {
+            getServletContext().setAttribute("NULL", null);
+            resp.getWriter().print("OK");
+        }
+    }
+}

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1651120&r1=1651119&r2=1651120&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Jan 12 15:29:47 2015
@@ -62,6 +62,9 @@
   </subsection>
   <subsection name="Catalina">
     <changelog>
+      <fix>
+        <bug>57425</bug> Don't add attributes with null value or name to the replicated context. (fschumacher)
+      </fix>
       <add>
         <bug>57431</bug> Enable usage of custom class for context creation when using embedded tomcat. (fschumacher)
       </add>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org