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 2009/11/10 16:39:00 UTC

svn commit: r834507 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/ rt/transports/http/src/main/java/org/apac...

Author: sergeyb
Date: Tue Nov 10 15:39:00 2009
New Revision: 834507

URL: http://svn.apache.org/viewvc?rev=834507&view=rev
Log:
JAXRS: fixing CXF 2529 and a minor update to AbstractHTTPServlet (a better longer term update will be to add a properties resource for static content types)

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
    cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java

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=834507&r1=834506&r2=834507&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 Tue Nov 10 15:39:00 2009
@@ -745,14 +745,21 @@
     private static Object processCookieParam(Message m, String cookieName, 
                               Class<?> pClass, Type genericType, String defaultValue) {
         List<String> values = new HttpHeadersImpl(m).getRequestHeader(HttpHeaders.COOKIE);
-        String value = values.size() == 1 && values.get(0).contains(cookieName + '=') 
-                       ? values.get(0) : defaultValue != null ? cookieName + '=' + defaultValue : null;
-        
-        if (value == null) {
+        String theValue = null;
+        for (String s : values) {
+            if (s.startsWith(cookieName)) {
+                theValue = s;
+                break;
+            }
+        }
+        if (theValue == null && defaultValue != null) {
+            theValue = cookieName + '=' + defaultValue;
+        }
+        if (theValue == null) {
             return null;
         }
         
-        Cookie c = Cookie.valueOf(value);
+        Cookie c = Cookie.valueOf(theValue);
         if (pClass.isAssignableFrom(Cookie.class)) {
             return c;
         }

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java?rev=834507&r1=834506&r2=834507&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java Tue Nov 10 15:39:00 2009
@@ -332,6 +332,11 @@
         // complete
     }
     
+    public void testMultipleCookieParam(@CookieParam("c1") String c1,
+                                        @CookieParam("c2") String c2) {
+        // complete
+    }
+    
     public void testParams(@Context UriInfo info,
                            @Context HttpHeaders hs,
                            @Context Request r,

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=834507&r1=834506&r2=834507&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Tue Nov 10 15:39:00 2009
@@ -556,6 +556,22 @@
     }
     
     @Test
+    public void testMultipleCookieParameters() throws Exception {
+        Class[] argType = {String.class, String.class};
+        Method m = Customer.class.getMethod("testMultipleCookieParam", argType);
+        MessageImpl messageImpl = new MessageImpl();
+        MultivaluedMap<String, String> headers = new MetadataMap<String, String>();
+        headers.add("Cookie", "c1=c1Value, c2=c2Value, c3=c3Value");
+        messageImpl.put(Message.PROTOCOL_HEADERS, headers);
+        List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+                                                           null, 
+                                                           messageImpl);
+        assertEquals(params.size(), 2);
+        assertEquals("c1Value", params.get(0));
+        assertEquals("c2Value", params.get(1));
+    }
+    
+    @Test
     public void testFromStringParameters() throws Exception {
         Class[] argType = {UUID.class, CustomerGender.class, CustomerGender.class};
         Method m = Customer.class.getMethod("testFromStringParam", argType);

Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java?rev=834507&r1=834506&r2=834507&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java Tue Nov 10 15:39:00 2009
@@ -21,8 +21,10 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletConfig;
@@ -54,6 +56,17 @@
     private static final String REDIRECT_SERVLET_NAME_PARAMETER = "redirect-servlet-name";
     private static final String REDIRECT_SERVLET_PATH_PARAMETER = "redirect-servlet-path";
     
+    private static final Map<String, String> STATIC_CONTENT_TYPES;
+    
+    static {
+        STATIC_CONTENT_TYPES = new HashMap<String, String>();
+        STATIC_CONTENT_TYPES.put("html", "text/html");
+        STATIC_CONTENT_TYPES.put("txt", "text/plain");
+        STATIC_CONTENT_TYPES.put("css", "text/css");
+        STATIC_CONTENT_TYPES.put("pdf", "application/pdf");
+        // TODO : add more types if needed
+    }
+    
     private List<String> staticResourcesList;
     private List<String> redirectList; 
     private String dispatcherServletPath;
@@ -151,16 +164,18 @@
     
     protected void handleRequest(HttpServletRequest request, HttpServletResponse response) 
         throws ServletException {
-        if (staticResourcesList != null 
-            && matchPath(staticResourcesList, request.getPathInfo())) {
-            serveStaticContent(request, response, request.getPathInfo());
-            return;
-        }
+        
         if (redirectList != null 
             && matchPath(redirectList, request.getPathInfo())) {
             redirect(request, response, request.getPathInfo());
             return;
         }
+        
+        if (staticResourcesList != null 
+            && matchPath(staticResourcesList, request.getPathInfo())) {
+            serveStaticContent(request, response, request.getPathInfo());
+            return;
+        }
         invoke(request, response);
     }
     
@@ -181,6 +196,14 @@
             throw new ServletException("Static resource " + pathInfo + " is not available");
         }
         try {
+            int ind = pathInfo.lastIndexOf(".");
+            if (ind != -1 && ind < pathInfo.length()) {
+                String type = STATIC_CONTENT_TYPES.get(pathInfo.substring(ind + 1));
+                if (type != null) {
+                    response.setContentType(type);
+                }
+            }
+            
             ServletOutputStream os = response.getOutputStream();
             IOUtils.copy(is, os);
             os.flush();

Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java?rev=834507&r1=834506&r2=834507&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java Tue Nov 10 15:39:00 2009
@@ -51,6 +51,8 @@
         namespaces.put("books", "http://www.w3.org/books");
         String value = source.getValue("xhtml:html/xhtml:body/xhtml:ul/books:bookTag", namespaces);
         assertEquals("CXF Rocks", value);
+        String ct = client.getResponse().getMetadata().getFirst("Content-Type").toString();
+        assertEquals("text/html", ct);
     }
     
     @Test