This is an automated email from the ASF dual-hosted git repository. veithen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ws-axiom.git
The following commit(s) were added to refs/heads/master by this push: new 2751be55a Make the behavior of ContentType well defined for null values 2751be55a is described below commit 2751be55a3e53c1fa886b3ef98a6ea4e8d121967 Author: Andreas Veithen <andreas.veit...@gmail.com> AuthorDate: Fri Nov 4 19:09:14 2022 +0000 Make the behavior of ContentType well defined for null values --- .../src/main/java/org/apache/axiom/mime/ContentType.java | 14 ++++++++++++-- .../org/apache/axiom/mime/ContentTypeBuilderTest.java | 16 ++++++++++++++++ .../test/java/org/apache/axiom/mime/ContentTypeTest.java | 8 ++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/axiom-api/src/main/java/org/apache/axiom/mime/ContentType.java b/axiom-api/src/main/java/org/apache/axiom/mime/ContentType.java index 85a8caa3a..dc90fbcbc 100644 --- a/axiom-api/src/main/java/org/apache/axiom/mime/ContentType.java +++ b/axiom-api/src/main/java/org/apache/axiom/mime/ContentType.java @@ -24,6 +24,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import javax.activation.MimeType; @@ -108,7 +109,8 @@ public final class ContentType { /** * Set the specified parameter value. If a parameter with the given name already exists, it will - * be replaced. Note that parameter names are case insensitive. + * be replaced. If the value is {@code null}, the parameter will be removed. + * Note that parameter names are case insensitive. * * @param name * the parameter name @@ -117,7 +119,11 @@ public final class ContentType { * @return the builder */ public Builder setParameter(String name, String value) { - parameters.put(name.toLowerCase(Locale.ENGLISH), value); + if (value == null) { + parameters.remove(name.toLowerCase(Locale.ENGLISH)); + } else { + parameters.put(name.toLowerCase(Locale.ENGLISH), value); + } return this; } @@ -166,6 +172,10 @@ public final class ContentType { * representing the parameter names, and odd entries the corresponding values) */ public ContentType(MediaType mediaType, String... parameters) { + Objects.requireNonNull(mediaType); + for (String parameter : parameters) { + Objects.requireNonNull(parameter); + } this.mediaType = mediaType; this.parameters = parameters.clone(); } diff --git a/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeBuilderTest.java b/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeBuilderTest.java index ebf722f54..23788cc1d 100644 --- a/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeBuilderTest.java +++ b/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeBuilderTest.java @@ -18,6 +18,9 @@ */ package org.apache.axiom.mime; +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; + import junit.framework.TestCase; public class ContentTypeBuilderTest extends TestCase { @@ -68,4 +71,17 @@ public class ContentTypeBuilderTest extends TestCase { builder.removeParameter("charset"); assertEquals("text/xml; x-param=\"value\"", builder.build().toString()); } + + public void testNullParameterName() { + ContentType.Builder builder = ContentType.builder(); + assertThrows(NullPointerException.class, () -> builder.setParameter(null, "value")); + } + + public void testNullParameterValue() { + ContentType.Builder builder = ContentType.builder(); + builder.setMediaType(MediaType.TEXT_XML); + builder.setParameter("param", "value"); + builder.setParameter("param", null); + assertThat(builder.build().toString()).isEqualTo("text/xml"); + } } diff --git a/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeTest.java b/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeTest.java index f58cde6f6..141e4a790 100644 --- a/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeTest.java +++ b/axiom-api/src/test/java/org/apache/axiom/mime/ContentTypeTest.java @@ -26,6 +26,14 @@ import java.text.ParseException; import junit.framework.TestCase; public class ContentTypeTest extends TestCase { + public void testNullMediaType() { + assertThrows(NullPointerException.class, () -> new ContentType((MediaType)null)); + } + + public void testNullParameter() { + assertThrows(NullPointerException.class, () -> new ContentType(MediaType.TEXT_PLAIN, "charset", null)); + } + public void testImmutable() { String[] parameters = { "charset", "utf-8" }; ContentType ct = new ContentType(MediaType.TEXT_XML, parameters);