You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2011/07/21 00:56:13 UTC

svn commit: r1148962 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java

Author: sergeyb
Date: Wed Jul 20 22:56:12 2011
New Revision: 1148962

URL: http://svn.apache.org/viewvc?rev=1148962&view=rev
Log:
[CXF-3673] Make ResponseBuilder.tag methods produce consistent header values

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java?rev=1148962&r1=1148961&r2=1148962&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java Wed Jul 20 22:56:12 2011
@@ -50,6 +50,9 @@ public class EntityTagHeaderProvider imp
         }  else {
             tag = header;
         }
+        if (tag.length() > 0 && !tag.startsWith("\"") && !tag.endsWith("\"")) {
+            return new EntityTag(tag, weak);
+        }
         if (tag.length() < 2 || !tag.startsWith("\"") || !tag.endsWith("\"")) {
             throw new IllegalArgumentException("Misformatted ETag : " + header);
         }
@@ -62,7 +65,12 @@ public class EntityTagHeaderProvider imp
         if (tag.isWeak()) {
             sb.append(WEAK_PREFIX);
         }
-        sb.append("\"").append(tag.getValue()).append("\"");
+        String tagValue = tag.getValue();
+        if (!tagValue.startsWith("\"")) {
+            sb.append("\"").append(tagValue).append("\"");
+        } else {
+            sb.append(tagValue);
+        }
         return sb.toString();
     }
 

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java?rev=1148962&r1=1148961&r2=1148962&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java Wed Jul 20 22:56:12 2011
@@ -113,11 +113,13 @@ public final class ResponseBuilderImpl e
     }
 
     public ResponseBuilder tag(EntityTag tag) {
-        return tag(tag == null ? null : tag.toString());
+        return setHeader(HttpHeaders.ETAG, tag == null ? null : tag.toString());
     }
 
     public ResponseBuilder tag(String tag) {
-        return setHeader(HttpHeaders.ETAG, tag);
+        // String tag value needs to be parsed as it may 
+        // contain parameters indicating it's a weak tag, etc
+        return tag(tag == null ? null : EntityTag.valueOf(tag));
     }
 
     public ResponseBuilder lastModified(Date date) {

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java?rev=1148962&r1=1148961&r2=1148962&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java Wed Jul 20 22:56:12 2011
@@ -25,6 +25,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
+import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.NewCookie;
@@ -83,6 +84,34 @@ public class ResponseBuilderImplTest ext
     }
     
     @Test
+    public void testTagString() {
+        Response r = Response.ok().tag("foo").build();
+        String eTag = r.getMetadata().getFirst("ETag").toString();
+        assertEquals("\"foo\"", eTag);
+    }
+    
+    @Test
+    public void testTagStringWithQuotes() {
+        Response r = Response.ok().tag("\"foo\"").build();
+        String eTag = r.getMetadata().getFirst("ETag").toString();
+        assertEquals("\"foo\"", eTag);
+    }
+    
+    @Test
+    public void testEntityTag() {
+        Response r = Response.ok().tag(new EntityTag("foo")).build();
+        String eTag = r.getMetadata().getFirst("ETag").toString();
+        assertEquals("\"foo\"", eTag);
+    }
+    
+    @Test
+    public void testEntityTag2() {
+        Response r = Response.ok().tag(new EntityTag("\"foo\"")).build();
+        String eTag = r.getMetadata().getFirst("ETag").toString();
+        assertEquals("\"foo\"", eTag);
+    }
+    
+    @Test
     public void testExpires() throws Exception {
         MetadataMap<String, Object> m = new MetadataMap<String, Object>();
         m.putSingle("Expires", "Tue, 21 Oct 2008 17:00:00 GMT");