You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bl...@apache.org on 2010/03/22 16:38:30 UTC

svn commit: r926142 - /cxf/sandbox/geronimo-jaxrs_1.0_spec/src/main/java/javax/ws/rs/core/MediaType.java

Author: bluk
Date: Mon Mar 22 15:38:30 2010
New Revision: 926142

URL: http://svn.apache.org/viewvc?rev=926142&view=rev
Log:
Update MediaType for params/hashcode corrections

Modified:
    cxf/sandbox/geronimo-jaxrs_1.0_spec/src/main/java/javax/ws/rs/core/MediaType.java

Modified: cxf/sandbox/geronimo-jaxrs_1.0_spec/src/main/java/javax/ws/rs/core/MediaType.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/geronimo-jaxrs_1.0_spec/src/main/java/javax/ws/rs/core/MediaType.java?rev=926142&r1=926141&r2=926142&view=diff
==============================================================================
--- cxf/sandbox/geronimo-jaxrs_1.0_spec/src/main/java/javax/ws/rs/core/MediaType.java (original)
+++ cxf/sandbox/geronimo-jaxrs_1.0_spec/src/main/java/javax/ws/rs/core/MediaType.java Mon Mar 22 15:38:30 2010
@@ -20,7 +20,9 @@
 package javax.ws.rs.core;
 
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Map;
+import java.util.TreeMap;
 
 import javax.ws.rs.ext.RuntimeDelegate;
 import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
@@ -122,7 +124,17 @@ public class MediaType {
         if (parameters == null) {
             this.params = Collections.emptyMap();
         } else {
-            this.params = Collections.unmodifiableMap(parameters);
+            // need to use a temporary map here since for some reason the ordering is important.
+            Map<String, String> temp = new TreeMap<String, String>(new Comparator<String>() {
+                public int compare(String o1, String o2) {
+                    return o1.compareToIgnoreCase(o2);
+                }
+            });
+            // need to put in as all lower case keys for comparisons, hashcode, and output
+            for (String key : parameters.keySet()) {
+                temp.put(key.toLowerCase(), parameters.get(key));
+            }
+            this.params = Collections.unmodifiableMap(temp);
         }
     }
 
@@ -192,8 +204,12 @@ public class MediaType {
     @Override
     public int hashCode() {
         int result = 17;
-        result = 31 * result + getType().hashCode();
-        result = 31 * result + getSubtype().hashCode();
+        // be sure to lowercase for comparisions
+
+        // be careful about hash code. since not guaranteed that this is a final
+        // class, need to use methods. methods do not guarantee lowercase
+        result = 31 * result + getType().toLowerCase().hashCode();
+        result = 31 * result + getSubtype().toLowerCase().hashCode();
         result = 31 * result + getParameters().hashCode();
         return result;
     }