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