You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2022/11/04 19:09:22 UTC

[ws-axiom] branch master updated: Make the behavior of ContentType well defined for null values

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 <an...@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);