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/05/15 19:11:52 UTC

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

Author: sergeyb
Date: Wed May 15 17:11:51 2013
New Revision: 1482966

URL: http://svn.apache.org/r1482966
Log:
[CXF-5007] More updates to ResponseBuilder, ResponseImpl, etc

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
    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/impl/ResponseBuilderImplTest.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Wed May 15 17:11:51 2013
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.ResourceBundle;
 import java.util.logging.Logger;
 
-import javax.ws.rs.InternalServerErrorException;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.container.AsyncResponse;
@@ -102,7 +101,7 @@ public class JAXRSInvoker extends Abstra
             Object serviceObject = getActualServiceObject(exchange, rootInstance);
             
             return invoke(exchange, request, serviceObject);
-        } catch (InternalServerErrorException ex) {
+        } catch (WebApplicationException ex) {
             responseList = checkExchangeForResponse(exchange);
             if (responseList != null) {
                 return responseList; 

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java Wed May 15 17:11:51 2013
@@ -100,6 +100,7 @@ public abstract class AbstractResponseCo
     }
 
     public MediaType getMediaType() {
+        //return r.getEntity() != null ? r.getMediaType() : null;
         return r.getMediaType();
     }
 

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImpl.java Wed May 15 17:11:51 2013
@@ -66,12 +66,12 @@ public class ContainerResponseContextImp
     
     @Override
     public OutputStream getEntityStream() {
-        return m.get(OutputStream.class);
+        return m.getContent(OutputStream.class);
     }
 
     @Override
     public void setEntityStream(OutputStream os) {
-        m.put(OutputStream.class, os);
+        m.setContent(OutputStream.class, os);
 
     }
 }

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java Wed May 15 17:11:51 2013
@@ -29,6 +29,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -272,7 +273,15 @@ public final class ResponseImpl extends 
     }
 
     public Set<Link> getLinks() {
-        return new HashSet<Link>(getAllLinks().values());
+        List<Object> linkValues = metadata.get(HttpHeaders.LINK);
+        Set<Link> links = new HashSet<Link>();
+        if (linkValues != null) {
+            for (Object o : linkValues) {
+                Link link = o instanceof Link ? (Link)o : Link.valueOf(o.toString());
+                links.add(link);
+            }
+        }
+        return links;
     }
 
     private Map<String, Link> getAllLinks() {
@@ -280,9 +289,9 @@ public final class ResponseImpl extends 
         if (linkValues == null) {
             return Collections.emptyMap();
         } else {
-            Map<String, Link> links = new HashMap<String, Link>();
+            Map<String, Link> links = new LinkedHashMap<String, Link>();
             for (Object o : linkValues) {
-                Link link = Link.valueOf(o.toString());
+                Link link = o instanceof Link ? (Link)o : Link.valueOf(o.toString());
                 links.put(link.getRel(), link);
             }
             return links;

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Wed May 15 17:11:51 2013
@@ -190,10 +190,13 @@ public class JAXRSOutInterceptor extends
         if (firstTry && userHeaders != null) {
             responseHeaders.putAll(userHeaders);
         }
-        
-        String initialResponseContentType = (String)message.get(Message.CONTENT_TYPE);
-        if (initialResponseContentType != null && !responseHeaders.containsKey(HttpHeaders.CONTENT_TYPE)) {
-            responseHeaders.putSingle(HttpHeaders.CONTENT_TYPE, initialResponseContentType);
+        if (entity != null) {
+            String initialResponseContentType = (String)message.get(Message.CONTENT_TYPE);
+            if (initialResponseContentType != null && !responseHeaders.containsKey(HttpHeaders.CONTENT_TYPE)) {
+                responseHeaders.putSingle(HttpHeaders.CONTENT_TYPE, initialResponseContentType);
+            }
+        } else {
+            message.remove(Message.CONTENT_TYPE);
         }
         
         message.put(Message.PROTOCOL_HEADERS, responseHeaders);
@@ -415,7 +418,7 @@ public class JAXRSOutInterceptor extends
     }
     
     private void setResponseDate(MultivaluedMap<String, Object> headers, boolean firstTry) {
-        if (!firstTry) {
+        if (!firstTry || headers.containsKey(HttpHeaders.DATE)) {
             return;
         }
         SimpleDateFormat format = HttpUtils.getHttpDateFormat();

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Wed May 15 17:11:51 2013
@@ -360,12 +360,13 @@ public final class InjectionUtils {
         } catch (WebApplicationException ex) {
             throw ex;
         } catch (Exception ex) {
+            Throwable t = getOrThrowActualException(ex);
             result = createFromParameterHandler(value, cls, message);
             if (result == null) {
                 LOG.severe(new org.apache.cxf.common.i18n.Message("CLASS_CONSTRUCTOR_FAILURE", 
                                                                    BUNDLE, 
                                                                    pClass.getName()).toString());
-                throw new ClientErrorException(HttpUtils.getParameterFailureStatus(pType), ex);
+                throw new ClientErrorException(HttpUtils.getParameterFailureStatus(pType), t);
             }
         }
         if (result == null) {
@@ -451,8 +452,7 @@ public final class InjectionUtils {
         } catch (NoSuchMethodException ex) {
             // no luck
         } catch (Exception ex) {
-            Throwable t = ex instanceof InvocationTargetException 
-                ? ((InvocationTargetException)ex).getTargetException() : ex; 
+            Throwable t = getOrThrowActualException(ex);
             LOG.severe(new org.apache.cxf.common.i18n.Message("CLASS_VALUE_OF_FAILURE", 
                                                                BUNDLE, 
                                                                pClass.getName()).toString());
@@ -461,6 +461,14 @@ public final class InjectionUtils {
         return null;
     }
     
+    private static Throwable getOrThrowActualException(Throwable ex) {
+        Throwable t = ex instanceof InvocationTargetException ? ((InvocationTargetException)ex).getCause() : ex; 
+        if (t instanceof WebApplicationException) {    
+            throw (WebApplicationException)t;
+        }
+        return t;
+    }
+    
     public static Object handleBean(Class<?> paramType, Annotation[] paramAnns, 
                                     MultivaluedMap<String, String> values,
                                     ParameterType pType, Message message, boolean decoded) {

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=1482966&r1=1482965&r2=1482966&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 Wed May 15 17:11:51 2013
@@ -1033,9 +1033,17 @@ public final class JAXRSUtils {
         if (pClass.isAssignableFrom(Cookie.class)) {
             return c;
         }
-        
-        return InjectionUtils.handleParameter(c.getValue(), false, pClass, paramAnns, 
-                                              ParameterType.COOKIE, m);
+        String value = InjectionUtils.isSupportedCollectionOrArray(pClass) 
+            && InjectionUtils.getActualType(genericType) == Cookie.class
+            ? c.toString() : c.getValue();
+        return InjectionUtils.createParameterObject(Collections.singletonList(value), 
+                                                    pClass, 
+                                                    genericType,
+                                                    paramAnns,
+                                                    null,
+                                                    false,
+                                                    ParameterType.COOKIE,
+                                                    m);
     }
     
     public static Object createBeanParamValue(Message m, Class<?> clazz, OperationResourceInfo ori) {

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=1482966&r1=1482965&r2=1482966&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 Wed May 15 17:11:51 2013
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
 import javax.annotation.PostConstruct;
@@ -148,6 +149,7 @@ public class Customer extends AbstractCu
     @Context private UriInfo uriInfo2;
     private String queryParam;
     
+    @DefaultValue("bQuery")
     @QueryParam("b")
     private String b;
     private String name;
@@ -439,7 +441,9 @@ public class Customer extends AbstractCu
     }
     
     public void testCookieParam(@CookieParam("c1") String c1,
-                                @CookieParam("c2") @DefaultValue("c2Value") String c2) {
+                                @CookieParam("c1") Set<Cookie> c11,
+                                @CookieParam("c2") @DefaultValue("c2Value") String c2,
+                                @CookieParam("c2") @DefaultValue("c2Value") Set<String> c22) {
         // complete
     }
     

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=1482966&r1=1482965&r2=1482966&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 May 15 17:11:51 2013
@@ -226,6 +226,23 @@ public class ResponseBuilderImplTest ext
         Link nextLink = linkBuilder.uri("http://example.com/page3").rel("next").build();
         checkBuild(Response.ok().links(prevLink, nextLink).build(), 200, null, m);
     }
+    
+    @Test
+    public void testLinks2() {
+        MetadataMap<String, Object> m = new MetadataMap<String, Object>();
+        m.add("Link", Link.valueOf("<http://example.com/page1>;rel=\"previous\""));
+        m.add("Link", Link.valueOf("<http://example.com/page3>;rel=\"next\""));
+        RuntimeDelegateImpl delegate = new RuntimeDelegateImpl();
+        Link.Builder linkBuilder = delegate.createLinkBuilder();
+        Link prevLink = linkBuilder.uri("http://example.com/page1").rel("previous").build();
+        // Reset linkbuilder
+        linkBuilder = delegate.createLinkBuilder();
+        Link nextLink = linkBuilder.uri("http://example.com/page3").rel("next").build();
+        Link[] links = new Link[2];
+        links[0] = prevLink;
+        links[1] = nextLink;
+        checkBuild(Response.ok().links(links).build(), 200, null, m);
+    }
 
     @Test
     public void testLinksNoReset() {

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java?rev=1482966&r1=1482965&r2=1482966&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java Wed May 15 17:11:51 2013
@@ -273,6 +273,21 @@ public class ResponseImplTest extends As
     }
     
     @Test
+    public void testGetLinksSameRel() {
+        ResponseImpl ri = new ResponseImpl(200);
+        MetadataMap<String, Object> meta = new MetadataMap<String, Object>();
+        ri.addMetadata(meta);
+        
+        meta.add(HttpHeaders.LINK, "<http://link1>");
+        meta.add(HttpHeaders.LINK, "<http://link2>");
+        
+        Set<Link> links = ri.getLinks();
+        assertEquals(2, links.size());
+        assertTrue(links.contains(Link.valueOf("<http://link1>")));
+        assertTrue(links.contains(Link.valueOf("<http://link2>")));
+    }
+    
+    @Test
     public void testGetLinks() {
         ResponseImpl ri = new ResponseImpl(200);
         MetadataMap<String, Object> meta = new MetadataMap<String, Object>();

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=1482966&r1=1482965&r2=1482966&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 Wed May 15 17:11:51 2013
@@ -31,6 +31,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
 import javax.servlet.ServletConfig;
@@ -856,7 +857,7 @@ public class JAXRSUtilsTest extends Asse
     
     @Test
     public void testCookieParameters() throws Exception {
-        Class<?>[] argType = {String.class, String.class};
+        Class<?>[] argType = {String.class, Set.class, String.class, Set.class};
         Method m = Customer.class.getMethod("testCookieParam", argType);
         MessageImpl messageImpl = new MessageImpl();
         MultivaluedMap<String, String> headers = new MetadataMap<String, String>();
@@ -865,10 +866,15 @@ public class JAXRSUtilsTest extends Asse
         List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
                                                            null, 
                                                            messageImpl);
-        assertEquals(params.size(), 2);
+        assertEquals(params.size(), 4);
         assertEquals("c1Value", params.get(0));
-        assertEquals("c2Value", params.get(1));
-        
+        Set<Cookie> set1 = CastUtils.cast((Set<?>)params.get(1));
+        assertEquals(1, set1.size());
+        assertTrue(set1.contains(Cookie.valueOf("c1=c1Value")));
+        assertEquals("c2Value", params.get(2));
+        Set<Cookie> set2 = CastUtils.cast((Set<?>)params.get(3));
+        assertTrue(set2.contains("c2Value"));
+        assertEquals(1, set2.size());
         
     }
     
@@ -1809,6 +1815,20 @@ public class JAXRSUtilsTest extends Asse
     }
     
     @Test
+    public void testDefaultValueOnField() throws Exception {
+
+        ClassResourceInfo cri = new ClassResourceInfo(Customer.class, true);
+        Customer c = new Customer();
+        OperationResourceInfo ori = new OperationResourceInfo(Customer.class.getMethods()[0],
+                                                              cri);
+        Message m = createMessage();
+        
+        m.put(Message.QUERY_STRING, "");
+        JAXRSUtils.injectParameters(ori, c, m);
+        assertEquals("bQuery", c.getB());
+    }
+    
+    @Test
     public void testContextResolverParam() throws Exception {
         
         ClassResourceInfo cri = new ClassResourceInfo(Customer.class, true);