Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Jencks2010-09-03 20:25:20 +0000
committerDavid Jencks2010-09-03 20:25:20 +0000
commit979c915c01874e0921cd411f846d5471dae6a15e (patch)
treefaa538179f58f09e145cfb3c621c9d0c6d03b267
parente8e96b9f7f2f89339f509143ba4417b4687f1e6b (diff)
downloadorg.eclipse.jetty.project-979c915c01874e0921cd411f846d5471dae6a15e.tar.gz
org.eclipse.jetty.project-979c915c01874e0921cd411f846d5471dae6a15e.tar.xz
org.eclipse.jetty.project-979c915c01874e0921cd411f846d5471dae6a15e.zip
bug 324493 Registration init parameter handling null check, setInitParameters additive
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/branches/jetty-8@2248 7e9141cc-0065-0410-87d8-b60c137991c4
-rw-r--r--jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java20
-rw-r--r--jetty-servlet/src/test/java/org/eclipse/jetty/servlet/HolderTest.java77
2 files changed, 93 insertions, 4 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java
index d1817bb793..b69d903a9b 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java
@@ -322,6 +322,12 @@ public class Holder<T> extends AbstractLifeCycle
public boolean setInitParameter(String name, String value)
{
illegalStateIfContextStarted();
+ if (name == null) {
+ throw new IllegalArgumentException("init parameter name required");
+ }
+ if (value == null) {
+ throw new IllegalArgumentException("non-null value required for init parameter " + name);
+ }
if (Holder.this.getInitParameter(name)!=null)
return false;
Holder.this.setInitParameter(name,value);
@@ -332,18 +338,24 @@ public class Holder<T> extends AbstractLifeCycle
{
illegalStateIfContextStarted();
Set<String> clash=null;
- for (String name : initParameters.keySet())
+ for (Map.Entry<String, String> entry : initParameters.entrySet())
{
- if (Holder.this.getInitParameter(name)!=null)
+ if (entry.getKey() == null) {
+ throw new IllegalArgumentException("init parameter name required");
+ }
+ if (entry.getValue() == null) {
+ throw new IllegalArgumentException("non-null value required for init parameter " + entry.getKey());
+ }
+ if (Holder.this.getInitParameter(entry.getKey())!=null)
{
if (clash==null)
clash=new HashSet<String>();
- clash.add(name);
+ clash.add(entry.getKey());
}
}
if (clash!=null)
return clash;
- Holder.this.setInitParameters(initParameters);
+ Holder.this.getInitParameters().putAll(initParameters);
return Collections.emptySet();
};
diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/HolderTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/HolderTest.java
new file mode 100644
index 0000000000..9bcdfe3862
--- /dev/null
+++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/HolderTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.eclipse.jetty.servlet;
+
+import java.util.Collections;
+import java.util.Set;
+
+import javax.servlet.Registration;
+import javax.servlet.ServletRegistration;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class HolderTest {
+
+ @Test
+ public void testInitParams() throws Exception {
+ ServletHolder holder = new ServletHolder(Holder.Source.JAVAX_API);
+ ServletRegistration reg = holder.getRegistration();
+ try {
+ reg.setInitParameter(null, "foo");
+ fail("null name accepted");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ reg.setInitParameter("foo", null);
+ fail("null value accepted");
+ } catch (IllegalArgumentException e) {
+ }
+ reg.setInitParameter("foo", "bar");
+ assertFalse(reg.setInitParameter("foo", "foo"));
+
+ Set<String> clash = reg.setInitParameters(Collections.singletonMap("foo", "bax"));
+ assertTrue("should be one clash", clash != null && clash.size() == 1);
+
+ try {
+ reg.setInitParameters(Collections.singletonMap((String)null, "bax"));
+ fail("null name in map accepted");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ reg.setInitParameters(Collections.singletonMap("foo", (String)null));
+ fail("null value in map accepted");
+ } catch (IllegalArgumentException e) {
+ }
+
+ Set<String> clash2 = reg.setInitParameters(Collections.singletonMap("FOO", "bax"));
+ assertTrue("should be no clash", clash2.isEmpty());
+ assertEquals("setInitParameters should not replace existing non-clashing init parameters", 2, reg.getInitParameters().size());
+
+ }
+}

Back to the top