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/02/25 16:14:11 UTC

svn commit: r1449743 - in /cxf/branches/2.7.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/

Author: sergeyb
Date: Mon Feb 25 15:14:11 2013
New Revision: 1449743

URL: http://svn.apache.org/r1449743
Log:
Merged revisions 1449740 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1449740 | sergeyb | 2013-02-25 15:03:33 +0000 (Mon, 25 Feb 2013) | 1 line
  
  [CXF-4852] Fixing ContainerRequestFilter to get request stream and URI replaced when requested
........

Modified:
    cxf/branches/2.7.x-fixes/   (props changed)
    cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java
    cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
    cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java

Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/trunk:r1449740

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

Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java?rev=1449743&r1=1449742&r2=1449743&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ContainerRequestContextImpl.java Mon Feb 25 15:14:11 2013
@@ -72,7 +72,7 @@ public class ContainerRequestContextImpl
     @Override
     public void setEntityStream(InputStream is) {
         checkContext();
-        m.put(InputStream.class, is);
+        m.setContent(InputStream.class, is);
     }
 
     @SuppressWarnings("unchecked")
@@ -85,6 +85,22 @@ public class ContainerRequestContextImpl
 
     @Override
     public void setRequestUri(URI requestUri) throws IllegalStateException {
+        if (requestUri.isAbsolute()) {
+            String baseUriString = new UriInfoImpl(m).getBaseUri().toString();
+            String requestUriString = new UriInfoImpl(m).getBaseUri().toString();
+            if (!requestUriString.startsWith(baseUriString)) {
+                setRequestUri(requestUri, URI.create("/"));
+                return;
+            } else {
+                requestUriString = requestUriString.substring(baseUriString.length() + 1);
+                requestUri = URI.create(requestUriString);
+            }
+                
+        }
+        doSetRequestUri(requestUri);
+    }
+    
+    public void doSetRequestUri(URI requestUri) throws IllegalStateException {
         if (!preMatch) {
             throw new IllegalStateException();
         }
@@ -93,7 +109,7 @@ public class ContainerRequestContextImpl
 
     @Override
     public void setRequestUri(URI baseUri, URI requestUri) throws IllegalStateException {
-        setRequestUri(requestUri);
+        doSetRequestUri(requestUri);
         Object servletRequest = m.get("HTTP.REQUEST");
         if (servletRequest != null) {
             ((javax.servlet.http.HttpServletRequest)servletRequest)

Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1449743&r1=1449742&r2=1449743&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Mon Feb 25 15:14:11 2013
@@ -1473,6 +1473,7 @@ public final class JAXRSUtils {
             ContainerRequestContext context = new ContainerRequestContextImpl(m, preMatch, false);
             for (ProviderInfo<ContainerRequestFilter> filter : containerFilters) {
                 try {
+                    InjectionUtils.injectContexts(filter.getProvider(), filter, m);
                     filter.getProvider().filter(context);
                 } catch (IOException ex) {
                     throw new InternalServerErrorException(ex);

Modified: cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java?rev=1449743&r1=1449742&r2=1449743&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java (original)
+++ cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java Mon Feb 25 15:14:11 2013
@@ -19,7 +19,9 @@
 
 package org.apache.cxf.systest.jaxrs;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -76,6 +78,7 @@ public class BookServer20 extends Abstra
         providers.add(new CustomDynamicFeature());
         providers.add(new PostMatchContainerRequestFilter());
         providers.add(new FaultyContainerRequestFilter());
+        providers.add(new PreMatchReplaceStreamOrAddress());
         sf.setProviders(providers);
         sf.setResourceProvider(BookStore.class,
                                new SingletonResourceProvider(new BookStore(), true));
@@ -135,6 +138,27 @@ public class BookServer20 extends Abstra
         
     }
     
+    @PreMatching
+    private static class PreMatchReplaceStreamOrAddress implements ContainerRequestFilter {
+        @Context
+        private UriInfo ui;
+        @Override
+        public void filter(ContainerRequestContext context) throws IOException {
+            String path = ui.getPath();
+            if (path.endsWith("books/checkN")) {
+                URI requestURI = URI.create(path.replace("N", "2"));
+                context.setRequestUri(requestURI);
+                replaceStream(context);
+            } else if (path.endsWith("books/check2")) {
+                replaceStream(context);
+            }
+        }
+        private void replaceStream(ContainerRequestContext context) {
+            InputStream is = new ByteArrayInputStream("123".getBytes());
+            context.setEntityStream(is);
+        }
+    }
+    
         
     @PreMatching
     @BindingPriority(2)

Modified: cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java?rev=1449743&r1=1449742&r2=1449743&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java (original)
+++ cxf/branches/2.7.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java Mon Feb 25 15:14:11 2013
@@ -373,6 +373,22 @@ public class JAXRS20ClientServerBookTest
     }
     
     @Test
+    public void testBookExistsServerStreamReplace() throws Exception {
+        String address = "http://localhost:" + PORT + "/bookstore/books/check2";
+        WebClient wc = WebClient.create(address);
+        wc.accept("text/plain").type("text/plain");
+        assertTrue(wc.post("s", Boolean.class));
+    }
+    
+    @Test
+    public void testBookExistsServerAddressOverwrite() throws Exception {
+        String address = "http://localhost:" + PORT + "/bookstore/books/checkN";
+        WebClient wc = WebClient.create(address);
+        wc.accept("text/plain").type("text/plain");
+        assertTrue(wc.post("s", Boolean.class));
+    }
+    
+    @Test
     public void testPostBookAsync() throws Exception {
         String address = "http://localhost:" + PORT + "/bookstore/bookheaders/simple";
         WebClient wc = createWebClientPost(address);