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 2013/04/11 13:59:01 UTC

svn commit: r1466840 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ systests/jaxrs/src/test/java...

Author: sergeyb
Date: Thu Apr 11 11:59:00 2013
New Revision: 1466840

URL: http://svn.apache.org/r1466840
Log:
[CXF-4950] Avoiding checking Consumes in case of GET and few other minor updaes

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfoComparator.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java?rev=1466840&r1=1466839&r2=1466840&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSInInterceptor.java Thu Apr 11 11:59:00 2013
@@ -123,7 +123,7 @@ public class JAXRSInInterceptor extends 
         
         String requestContentType = (String)message.get(Message.CONTENT_TYPE);
         if (requestContentType == null) {
-            requestContentType = "*/*";
+            requestContentType = MediaType.WILDCARD;
         }
         
         String rawPath = HttpUtils.getPathToMatch(message, true);

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfoComparator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfoComparator.java?rev=1466840&r1=1466839&r2=1466840&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfoComparator.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfoComparator.java Thu Apr 11 11:59:00 2013
@@ -22,6 +22,7 @@ package org.apache.cxf.jaxrs.model;
 import java.util.Comparator;
 import java.util.List;
 
+import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.endpoint.Endpoint;
@@ -31,15 +32,16 @@ import org.apache.cxf.message.Message;
 
 public class OperationResourceInfoComparator implements Comparator<OperationResourceInfo> {
     
-    private static final String HEAD_METHOD = "HEAD";
-    private boolean headMethod;
+    private String httpMethod;
+    private boolean getMethod;
     private Message message;
     private ResourceComparator rc;  
     private MediaType contentType;
     private List<MediaType> acceptTypes;
 
     public OperationResourceInfoComparator(Message m, 
-                                           String method, 
+                                           String httpMethod,
+                                           boolean getMethod,
                                            MediaType contentType,
                                            List<MediaType> acceptTypes) {
         this.message = m;
@@ -49,9 +51,10 @@ public class OperationResourceInfoCompar
                 rc = (ResourceComparator)o;
             }
         }
-        headMethod = HEAD_METHOD.equals(method);
         this.contentType = contentType;
         this.acceptTypes = acceptTypes;
+        this.httpMethod = httpMethod;
+        this.getMethod = getMethod;
     }
     
     public int compare(OperationResourceInfo e1, OperationResourceInfo e2) {
@@ -63,10 +66,10 @@ public class OperationResourceInfoCompar
             }
         }
         
-        if (headMethod) {
-            if (HEAD_METHOD.equals(e1.getHttpMethod())) {
+        if (!getMethod && HttpMethod.HEAD.equals(httpMethod)) {
+            if (HttpMethod.HEAD.equals(e1.getHttpMethod())) {
                 return -1;
-            } else if (HEAD_METHOD.equals(e2.getHttpMethod())) {
+            } else if (HttpMethod.HEAD.equals(e2.getHttpMethod())) {
                 return 1;
             }
         }
@@ -81,7 +84,7 @@ public class OperationResourceInfoCompar
             return e1.getHttpMethod() != null ? -1 : 1;
         }
         
-        if (result == 0) {
+        if (result == 0 && !getMethod) {
         
             result = JAXRSUtils.compareSortedConsumesMediaTypes(
                           e1.getConsumeTypes(), 

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1466840&r1=1466839&r2=1466840&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Thu Apr 11 11:59:00 2013
@@ -396,17 +396,19 @@ public final class JAXRSUtils {
         boolean throwException) {
         
         final boolean isFineLevelLoggable = LOG.isLoggable(Level.FINE); 
-                
+        final boolean getMethod = HttpMethod.GET.equals(httpMethod);
+        
         MediaType requestType;
         try {
-            requestType = toMediaType(requestContentType);
+            requestType = getMethod ? MediaType.WILDCARD_TYPE : toMediaType(requestContentType);
         } catch (IllegalArgumentException ex) {
             throw new NotSupportedException(ex);
         }
         
         SortedMap<OperationResourceInfo, MultivaluedMap<String, String>> candidateList = 
             new TreeMap<OperationResourceInfo, MultivaluedMap<String, String>>(
-                new OperationResourceInfoComparator(message, httpMethod, requestType, acceptContentTypes));
+                new OperationResourceInfoComparator(message, httpMethod, 
+                                                    getMethod, requestType, acceptContentTypes));
 
         int pathMatched = 0;
         int methodMatched = 0;
@@ -442,22 +444,10 @@ public final class JAXRSUtils {
                             if (matchHttpMethod(ori.getHttpMethod(), httpMethod)) {
                                 methodMatched++;
                                 //CHECKSTYLE:OFF
-                                if (matchConsumeTypes(requestType, ori)) {
+                                if (getMethod || matchConsumeTypes(requestType, ori)) {
                                     consumeMatched++;
                                     for (MediaType acceptType : acceptContentTypes) {
-                                        MediaType pMediaType = matchProduceTypes(acceptType, ori);
-                                        if (pMediaType != null) {
-                                            if (acceptContentTypes.size() > 1 
-                                                || ori.getProduceTypes().size() > 1) {
-                                                pMediaType = intersectSortMediaTypes(acceptContentTypes,
-                                                                                     ori.getProduceTypes(),
-                                                                                     false).get(0);
-                                            }
-                                            map.putSingle(Message.CONTENT_TYPE, 
-                                                          mediaTypeToString(pMediaType, 
-                                                                            MEDIA_TYPE_Q_PARAM, 
-                                                                            MEDIA_TYPE_QS_PARAM));
-                                            
+                                        if (matchProduceTypes(acceptType, ori)) {
                                             candidateList.put(ori, map);
                                             added = true;
                                             break;
@@ -498,10 +488,12 @@ public final class JAXRSUtils {
                                ori.getClassResourceInfo().getServiceClass().getName()).toString());
             }
             if (!ori.isSubResourceLocator()) {
-                List<String> responseContentType = matchedValues.remove(Message.CONTENT_TYPE);
-                if (responseContentType != null) {
-                    message.getExchange().put(Message.CONTENT_TYPE, responseContentType.get(0));
-                }
+                MediaType responseMediaType = intersectSortMediaTypes(acceptContentTypes,
+                                                                      ori.getProduceTypes(),
+                                                                      false).get(0);
+                message.getExchange().put(Message.CONTENT_TYPE, mediaTypeToString(responseMediaType, 
+                                                                                  MEDIA_TYPE_Q_PARAM, 
+                                                                                  MEDIA_TYPE_QS_PARAM));
             }
             return ori;
         }
@@ -1389,13 +1381,10 @@ public final class JAXRSUtils {
         return !intersectMimeTypes(ori.getConsumeTypes(), requestContentType).isEmpty();
     }
     
-    public static MediaType matchProduceTypes(MediaType acceptContentType, 
+    public static boolean matchProduceTypes(MediaType acceptContentType, 
                                               OperationResourceInfo ori) {
         
-        List<MediaType> types = intersectMimeTypes(ori.getProduceTypes(), 
-                                                   Collections.singletonList(acceptContentType),
-                                                   true);
-        return types.isEmpty() ? null : types.get(0);
+        return !intersectMimeTypes(ori.getProduceTypes(), acceptContentType).isEmpty();
     }
     
     public static boolean matchMimeTypes(MediaType requestContentType, 

Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=1466840&r1=1466839&r2=1466840&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java Thu Apr 11 11:59:00 2013
@@ -887,7 +887,7 @@ public class BookStore {
     
     @GET
     @Path("/books/{bookId}/")
-    @Produces("application/json;q=0.9")
+    @Produces("application/json;qs=0.9")
     public Book getBookAsJSON() throws BookNotFoundFault {
         return doGetBook(currentBookId);
     }