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/07/09 19:30:44 UTC

svn commit: r1359300 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/

Author: sergeyb
Date: Mon Jul  9 17:30:44 2012
New Revision: 1359300

URL: http://svn.apache.org/viewvc?rev=1359300&view=rev
Log:
[CXF-4409] Updating ProviderFactory to avoid clearing the proxies during recursive calls

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java?rev=1359300&r1=1359299&r2=1359300&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java Mon Jul  9 17:30:44 2012
@@ -75,6 +75,7 @@ import org.apache.cxf.message.MessageUti
 public class MultipartProvider extends AbstractConfigurableProvider
     implements MessageBodyReader<Object>, MessageBodyWriter<Object> {
     
+    private static final String ACTIVE_JAXRS_PROVIDER_KEY = "active.jaxrs.provider";
     private static final Logger LOG = LogUtils.getL7dLogger(MultipartProvider.class);
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(MultipartProvider.class);
 
@@ -366,8 +367,14 @@ public class MultipartProvider extends A
                                             Annotation[] anns,
                                             String mimeType, int id) {
         MediaType mt = MediaType.valueOf(mimeType);
-        MessageBodyWriter<T> r = 
-            mc.getProviders().getMessageBodyWriter(cls, genericType, anns, mt);
+        mc.put(ACTIVE_JAXRS_PROVIDER_KEY, this);
+        
+        MessageBodyWriter<T> r = null;
+        try {
+            r = mc.getProviders().getMessageBodyWriter(cls, genericType, anns, mt);
+        } finally {
+            mc.put("active.jaxrs.provider", null); 
+        }
         if (r == null) {
             org.apache.cxf.common.i18n.Message message = 
                 new org.apache.cxf.common.i18n.Message("NO_MSG_WRITER",
@@ -376,6 +383,7 @@ public class MultipartProvider extends A
             LOG.severe(message.toString());
             throw new WebApplicationException(500);
         }
+        
         return new MessageBodyWriterDataHandler<T>(r, obj, cls, genericType, anns, mt);
     }
     private <T> DataHandler getHandlerForObject(T obj, 

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1359300&r1=1359299&r2=1359300&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Mon Jul  9 17:30:44 2012
@@ -66,6 +66,7 @@ import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageUtils;
 
 public final class ProviderFactory {
+    private static final String ACTIVE_JAXRS_PROVIDER_KEY = "active.jaxrs.provider";
     private static final Logger LOG = LogUtils.getL7dLogger(ProviderFactory.class);
     private static final ProviderFactory SHARED_FACTORY = getInstance();
     
@@ -685,7 +686,8 @@ public final class ProviderFactory {
             return false;
         }
         boolean injected = false;
-        if (this != SHARED_FACTORY || !isJaxbBasedProvider(ep)) {
+        if ((this != SHARED_FACTORY || !isJaxbBasedProvider(ep))
+            && m.get(ACTIVE_JAXRS_PROVIDER_KEY) != ep) {
             injectContextValues(pi, m);
             injected = true;
         }

Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java?rev=1359300&r1=1359299&r2=1359300&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java Mon Jul  9 17:30:44 2012
@@ -240,7 +240,6 @@ public class JAXRSMultipartTest extends 
     public void testAddBookAsJAXBJSONProxy() throws Exception {
         MultipartStore store = 
             JAXRSClientFactory.create("http://localhost:" + PORT, MultipartStore.class);
-        
         Book b = store.addBookJaxbJsonWithConsumes(new Book2("CXF in Action", 1L), 
                                            new Book("CXF in Action - 2", 2L));
         assertEquals(124L, b.getId());
@@ -248,6 +247,15 @@ public class JAXRSMultipartTest extends 
     }
     
     @Test
+    public void testUseProxyToAddBookAndSimpleParts() throws Exception {
+        MultipartStore store = 
+            JAXRSClientFactory.create("http://localhost:" + PORT, MultipartStore.class);
+        Book b = store.testAddBookAndSimpleParts(new Book("CXF in Action", 124L), "1", "2");
+        assertEquals(124L, b.getId());
+        assertEquals("CXF in Action - 12", b.getName());
+    }
+    
+    @Test
     public void testAddBookAsJAXBOnlyProxy() throws Exception {
         MultipartStore store = 
             JAXRSClientFactory.create("http://localhost:" + PORT, MultipartStore.class);

Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java?rev=1359300&r1=1359299&r2=1359300&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java Mon Jul  9 17:30:44 2012
@@ -374,6 +374,17 @@ public class MultipartStore {
     }
     
     @POST
+    @Path("/books/jaxbandsimpleparts")
+    @Consumes("multipart/related")
+    @Produces("text/xml")
+    public Book testAddBookAndSimpleParts(
+        @Multipart(value = "rootPart", type = "text/xml") Book b1,
+        @Multipart(value = "simplePart1") String simplePart1,
+        @Multipart(value = "simplePart2") String simplePart2) throws Exception {
+        return new Book(b1.getName() + " - " + simplePart1 + simplePart2, b1.getId());   
+    }
+    
+    @POST
     @Path("/books/jaxbonly")
     @Consumes("multipart/related")
     @Produces("text/xml")