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 2012/04/23 14:15:03 UTC

svn commit: r1329200 - in /cxf/branches/2.3.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/

Author: sergeyb
Date: Mon Apr 23 12:15:02 2012
New Revision: 1329200

URL: http://svn.apache.org/viewvc?rev=1329200&view=rev
Log:
Merged revisions 1329185 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.4.x-fixes

................
  r1329185 | sergeyb | 2012-04-23 12:18:09 +0100 (Mon, 23 Apr 2012) | 20 lines
  
  Merged revisions 1329183 via svnmerge from 
  https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
  
  ................
    r1329183 | sergeyb | 2012-04-23 12:11:55 +0100 (Mon, 23 Apr 2012) | 13 lines
    
    Merged revisions 1329178,1329180 via svnmerge from 
    https://svn.apache.org/repos/asf/cxf/trunk
    
    ........
      r1329178 | sergeyb | 2012-04-23 12:07:09 +0100 (Mon, 23 Apr 2012) | 1 line
      
      [CXF-4243] Fixing Request.selectVariant implementation
    ........
      r1329180 | sergeyb | 2012-04-23 12:08:06 +0100 (Mon, 23 Apr 2012) | 1 line
      
      [CXF-4259] Updating SetCookie handler to ignore the Expires property
    ........
  ................
................

Modified:
    cxf/branches/2.3.x-fixes/   (props changed)
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/branches/2.5.x-fixes:r1329183
  Merged /cxf/branches/2.4.x-fixes:r1329185
  Merged /cxf/trunk:r1329178-1329180

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java Mon Apr 23 12:15:02 2012
@@ -30,6 +30,7 @@ public class NewCookieHeaderProvider imp
     private static final String MAX_AGE = "Max-Age";
     private static final String COMMENT = "Comment";
     private static final String SECURE = "Secure";
+    private static final String EXPIRES = "Expires";
     
     public NewCookie fromString(String c) {
         
@@ -60,6 +61,9 @@ public class NewCookieHeaderProvider imp
                 comment = theToken.substring(COMMENT.length() + 1);
             } else if (theToken.startsWith(SECURE)) {
                 isSecure = true;
+            } else if (theToken.startsWith(EXPIRES)) {
+                // ignore
+                continue;
             } else {
                 int i = theToken.indexOf('=');
                 if (i != -1) {

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java Mon Apr 23 12:15:02 2012
@@ -36,6 +36,7 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Variant;
 
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.jaxrs.utils.HttpUtils;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.message.Message;
@@ -61,22 +62,25 @@ public class RequestImpl implements Requ
         if (vars == null || vars.isEmpty()) {
             throw new IllegalArgumentException("List of Variants is either null or empty");
         }
-        MediaType inMediaType = headers.getMediaType();
-        Locale inLang = headers.getLanguage();
-        String inEnc = headers.getRequestHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
+        List<MediaType> acceptMediaTypes = headers.getAcceptableMediaTypes();
+        List<Locale> acceptLangs = headers.getAcceptableLanguages();
+        List<String> acceptEncs = parseAcceptEnc(
+            headers.getRequestHeaders().getFirst(HttpHeaders.ACCEPT_ENCODING));
         
         List<Variant> matchingVars = new LinkedList<Variant>();
         for (Variant var : vars) {
             MediaType mt = var.getMediaType();
             Locale lang = var.getLanguage();
             String enc = var.getEncoding();
+                        
+            boolean mtMatched = mt == null || acceptMediaTypes.isEmpty()
+                || JAXRSUtils.intersectMimeTypes(acceptMediaTypes, mt).size() != 0;
             
-            boolean mtMatched = mt == null || inMediaType == null
-                || JAXRSUtils.intersectMimeTypes(Collections.singletonList(inMediaType), mt).size() != 0;
+            boolean encMatched = acceptEncs.isEmpty() || enc == null 
+                || acceptEncs.contains(enc);
             
-            boolean encMatched = inEnc == null || enc == null || inEnc.equalsIgnoreCase(enc);
-            
-            boolean langMatched = inLang == null || lang == null || inLang.equals(lang);
+            boolean langMatched = lang == null || acceptLangs.isEmpty()
+                || isLanguageMatched(acceptLangs, lang);
             
             if (mtMatched && encMatched && langMatched) {
                 matchingVars.add(var);
@@ -88,8 +92,29 @@ public class RequestImpl implements Requ
         return matchingVars.isEmpty() ? null : matchingVars.get(0);
     }
 
+    private static boolean isLanguageMatched(List<Locale> locales, Locale l) {
+        for (Locale locale : locales) {
+            if (locale.getLanguage().equalsIgnoreCase(l.getLanguage())) {
+                return true;
+            }
+        }
+        return false;
+    }
 
-
+    private static List<String> parseAcceptEnc(String acceptEnc) {
+        if (StringUtils.isEmpty(acceptEnc)) {
+            return Collections.emptyList();
+        }
+        List<String> list = new LinkedList<String>();
+        String[] values = acceptEnc.split(",");
+        for (String value : values) {
+            String[] pair = value.trim().split(";");
+            // ignore encoding qualifiers if any for now
+            list.add(pair[0]);
+        }
+        return list;
+    }
+    
     public ResponseBuilder evaluatePreconditions(EntityTag eTag) {
         ResponseBuilder rb = evaluateIfMatch(eTag);
         if (rb == null) {

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java Mon Apr 23 12:15:02 2012
@@ -38,6 +38,13 @@ public class NewCookieHeaderProviderTest
                    && "foo".equals(c.getName()));
     }
     
+    @Test
+    public void testFromSimpleStringWithExpires() {
+        NewCookie c = NewCookie.valueOf("foo=bar;Expires=Wed, 09 Jun 2021 10:18:14 GMT");
+        assertTrue("bar".equals(c.getValue())
+                   && "foo".equals(c.getName()));
+    }
+    
         
     @Test
     public void testFromComplexString() {

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java Mon Apr 23 12:15:02 2012
@@ -86,9 +86,9 @@ public class RequestImplTest extends Ass
     
     @Test
     public void testSingleNonMatchingVariant() {
-        metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
-        metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
-        metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+        metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+        metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en");
+        metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "utf-8");
         
         List<Variant> list = new ArrayList<Variant>();
         list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
@@ -98,9 +98,9 @@ public class RequestImplTest extends Ass
     
     @Test
     public void testMultipleNonMatchingVariants() {
-        metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
-        metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
-        metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+        metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+        metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en");
+        metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "utf-8");
         
         List<Variant> list = new ArrayList<Variant>();
         list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
@@ -112,15 +112,15 @@ public class RequestImplTest extends Ass
     
     @Test
     public void testMultipleVariantsSingleMatch() {
-        metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
-        metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
-        metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+        metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+        metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en");
+        metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "gzip");
         
         List<Variant> list = new ArrayList<Variant>();
         list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
         list.add(new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("es"), "utf-8"));
         
-        Variant var3 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "utf-8");
+        Variant var3 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "gzip");
         list.add(var3);
         assertSame(var3, new RequestImpl(m).selectVariant(list));
         
@@ -128,13 +128,13 @@ public class RequestImplTest extends Ass
     
     @Test
     public void testMultipleVariantsBestMatch() {
-        metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
-        metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
-        metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+        metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+        metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en-us");
+        metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "gzip;q=1.0, compress");
         
         List<Variant> list = new ArrayList<Variant>();
-        list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
-        Variant var2 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "utf-8");
+        list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "gzip"));
+        Variant var2 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "gzip");
         list.add(var2);
         Variant var3 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), null);
         list.add(var3);
@@ -142,7 +142,6 @@ public class RequestImplTest extends Ass
         list.clear();
         list.add(var3);
         assertSame(var3, new RequestImpl(m).selectVariant(list));
-        
     }
     
     private void assertSameVariant(MediaType mt, Locale lang, String enc) {