diff options
author | David Jencks | 2010-09-03 20:25:20 +0000 |
---|---|---|
committer | David Jencks | 2010-09-03 20:25:20 +0000 |
commit | 979c915c01874e0921cd411f846d5471dae6a15e (patch) | |
tree | faa538179f58f09e145cfb3c621c9d0c6d03b267 | |
parent | e8e96b9f7f2f89339f509143ba4417b4687f1e6b (diff) | |
download | org.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.java | 20 | ||||
-rw-r--r-- | jetty-servlet/src/test/java/org/eclipse/jetty/servlet/HolderTest.java | 77 |
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()); + + } +} |