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/07/13 14:55:39 UTC

svn commit: r793573 - in /cxf/branches/2.2.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/ rt/front...

Author: sergeyb
Date: Mon Jul 13 12:55:38 2009
New Revision: 793573

URL: http://svn.apache.org/viewvc?rev=793573&view=rev
Log:
Merged revisions 793570 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r793570 | sergeyb | 2009-07-13 13:47:10 +0100 (Mon, 13 Jul 2009) | 1 line
  
  JAX-RS : support for explicitly provided CachingEventStreamWriters
........

Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
    cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
    cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul 13 12:55:38 2009
@@ -1 +1 @@
-/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013,789371,789387,789420,789527-789530,789704-789705,789788,789811,789896-789901,790074,790094,790134,790188,790294,790553,790637-790644,790868,791301,791354,791538,791753,791947,792007,792096,792183,792261-792265,792271,792604,792683-792685,792975,792985
+/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013,789371,789387,789420,789527-789530,789704-789705,789788,789811,789896-789901,790074,790094,790134,790188,790294,790553,790637-790644,790868,791301,791354,791538,791753,791947,792007,792096,792183,792261-792265,792271,792604,792683-792685,792975,792985,793570

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

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Mon Jul 13 12:55:38 2009
@@ -205,6 +205,10 @@
         
         if (status >= 400) {
             
+            if (m.getReturnType() == Response.class && m.getExceptionTypes().length == 0) {
+                return;
+            }
+            
             ResponseExceptionMapper<?> mapper = findExceptionMapper(m, message);
             if (mapper != null) {
                 Throwable t = mapper.fromResponse(r);

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/tl/ThreadLocalMessageContext.java Mon Jul 13 12:55:38 2009
@@ -81,8 +81,9 @@
     public void put(Object key, Object value) {
         if (get() != null) {
             get().put(key, value);
+        } else {
+            throw new IllegalStateException("MessageContext is not set");
         }
-        throw new IllegalStateException("MessageContext is not set");
     }
 
     public <T, E> T getResolver(Class<T> resolverClass, Class<E> resolveClazz) {

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Mon Jul 13 12:55:38 2009
@@ -257,10 +257,12 @@
     }
     
     private void checkCachedStream(Message m, OutputStream osOriginal, boolean enabled) throws Exception {
-        if (!enabled) {
-            return;
+        XMLStreamWriter writer = null;
+        if (enabled) {
+            writer = m.getContent(XMLStreamWriter.class);
+        } else {
+            writer = (XMLStreamWriter)m.get(XMLStreamWriter.class.getName());
         }
-        XMLStreamWriter writer = m.getContent(XMLStreamWriter.class);
         if (writer instanceof CachingXmlEventWriter) {
             CachingXmlEventWriter cache = (CachingXmlEventWriter)writer;
             if (cache.getEvents().size() != 0) {
@@ -272,11 +274,13 @@
             m.setContent(XMLStreamWriter.class, null);
             return;
         }
-        OutputStream os = m.getContent(OutputStream.class);
-        if (os != osOriginal && os instanceof CachedOutputStream) {
-            CachedOutputStream cos = (CachedOutputStream)os;
-            if (cos.size() != 0) {
-                cos.writeCacheTo(osOriginal);
+        if (enabled) {
+            OutputStream os = m.getContent(OutputStream.class);
+            if (os != osOriginal && os instanceof CachedOutputStream) {
+                CachedOutputStream cos = (CachedOutputStream)os;
+                if (cos.size() != 0) {
+                    cos.writeCacheTo(osOriginal);
+                }
             }
         }
     }

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Mon Jul 13 12:55:38 2009
@@ -141,16 +141,18 @@
 
     protected Object doUnmarshal(Unmarshaller unmarshaller, InputStream is, MediaType mt) 
         throws JAXBException {
-        MessageContext mc = getContext();
-        if (mc != null) {
-            XMLStreamReader reader = getContext().getContent(XMLStreamReader.class);
-            if (reader != null) {
-                return unmarshalFromReader(unmarshaller, reader, mt);
-            }
+        XMLStreamReader reader = getStreamReader(is, mt);
+        if (reader != null) {
+            return unmarshalFromReader(unmarshaller, reader, mt);
         }
         return unmarshalFromInputStream(unmarshaller, is, mt);
     }
     
+    protected XMLStreamReader getStreamReader(InputStream is, MediaType mt) {
+        MessageContext mc = getContext();
+        return mc != null ? mc.getContent(XMLStreamReader.class) : null;
+    }
+    
     protected Object unmarshalFromInputStream(Unmarshaller unmarshaller, InputStream is, MediaType mt) 
         throws JAXBException {
         return unmarshaller.unmarshal(is);
@@ -190,14 +192,9 @@
             ms.setProperty(entry.getKey(), entry.getValue());
         }
         
-        XMLStreamWriter writer = null;
         MessageContext mc = getContext();
         if (mc != null) {
-            writer = mc.getContent(XMLStreamWriter.class);
-            if (writer == null && enableStreaming) {
-                writer = StaxUtils.createXMLStreamWriter(os);
-            }
-            // check Marshaller properties here as well which might've been set earlier on,
+            // check Marshaller properties which might've been set earlier on,
             // they'll overwrite statically configured ones
             for (String key : MARSHALLER_PROPERTIES) {
                 Object value = mc.get(key);
@@ -207,13 +204,29 @@
             }
             
         }
+        XMLStreamWriter writer = getStreamWriter(obj, os, mt);
         if (writer != null) {
+            if (mc != null) {
+                mc.put(XMLStreamWriter.class.getName(), writer);
+            }
             marshalToWriter(ms, obj, writer, mt);
         } else {
             marshalToOutputStream(ms, obj, os, mt);
         }
     }
     
+    protected XMLStreamWriter getStreamWriter(Object obj, OutputStream os, MediaType mt) {
+        XMLStreamWriter writer = null;
+        MessageContext mc = getContext();
+        if (mc != null) {
+            writer = mc.getContent(XMLStreamWriter.class);
+            if (writer == null && enableStreaming) {
+                writer = StaxUtils.createXMLStreamWriter(os);
+            }
+        }
+        return writer;
+    }
+    
     protected void marshalToOutputStream(Marshaller ms, Object obj, OutputStream os, MediaType mt) 
         throws Exception {
         ms.marshal(obj, os);

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java Mon Jul 13 12:55:38 2009
@@ -79,6 +79,29 @@
         assertEquals("123", values.getFirst("id"));
         assertEquals("3", values.getFirst("order"));
     }
+    
+    @Test
+    public void testMatchWithMultipleMatrixParams() throws Exception {
+        URITemplate uriTemplate = 
+            new URITemplate("renderwidget/id/{id}/type/{type}/size/{size}/locale/{locale}/{properties}");
+        MultivaluedMap<String, String> values = new MetadataMap<String, String>();
+
+        assertTrue(uriTemplate.match("renderwidget/id/1007/type/1/size/1/locale/en_US/properties;a=b", 
+                                     values));
+        assertEquals("1007", values.getFirst("id"));
+    }
+    
+    @Test
+    public void testMatchWithMultipleMatrixParams2() throws Exception {
+        URITemplate uriTemplate = 
+            new URITemplate("renderwidget/id/{id}/type/{type}/size/{size}/locale/{locale}/{properties}");
+        MultivaluedMap<String, String> values = new MetadataMap<String, String>();
+
+        assertTrue(uriTemplate.match(
+                   "renderwidget/id/1007/type/1/size/1/locale/en_US/properties;numResults=1;foo=bar", 
+                    values));
+        assertEquals("1007", values.getFirst("id"));
+    }
 
     @Test
     public void testMatchWithMatrixOnClearPath3() throws Exception {

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java Mon Jul 13 12:55:38 2009
@@ -18,8 +18,6 @@
  */
 package org.apache.cxf.jaxrs.model.wadl;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
@@ -84,14 +82,14 @@
         assertNotNull(r);
         assertEquals(WadlGenerator.WADL_TYPE.toString(),
                      r.getMetadata().getFirst(HttpHeaders.CONTENT_TYPE));
-        File f = new File("test.xml");
-        f.delete();
-        f.createNewFile();
-        System.out.println(f.getAbsolutePath());
-        FileOutputStream fos = new FileOutputStream(f);
-        fos.write(r.getEntity().toString().getBytes());
-        fos.flush();
-        fos.close();
+//        File f = new File("test.xml");
+//        f.delete();
+//        f.createNewFile();
+//        System.out.println(f.getAbsolutePath());
+//        FileOutputStream fos = new FileOutputStream(f);
+//        fos.write(r.getEntity().toString().getBytes());
+//        fos.flush();
+//        fos.close();
     }
     
     @Test

Modified: cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java (original)
+++ cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java Mon Jul 13 12:55:38 2009
@@ -244,6 +244,13 @@
     }
     
     @GET
+    @Path("/books/{bookId}/")
+    @Produces("text/xml")
+    public Book getBookTextXml(@PathParam("bookId") String id) throws BookNotFoundFault {
+        return doGetBook(id);
+    }
+    
+    @GET
     @Path("/books/wrapper/{bookId}/")
     @Produces("application/xml")
     public BookWrapper getWrappedBook(@PathParam("bookId") Long id) throws BookNotFoundFault {

Modified: cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java?rev=793573&r1=793572&r2=793573&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java (original)
+++ cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java Mon Jul 13 12:55:38 2009
@@ -20,17 +20,24 @@
 package org.apache.cxf.systest.jaxrs;
 
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import javax.ws.rs.core.MediaType;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
 import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
+import org.apache.cxf.staxutils.CachingXmlEventWriter;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
 
@@ -48,10 +55,17 @@
             sf.setResourceClasses(BookStore.class);
             sf.setResourceProvider(BookStore.class,
                                    new SingletonResourceProvider(new BookStore()));
-            JAXBElementProvider p = new JAXBElementProvider();
-            p.setEnableBuffering(true);
-            p.setEnableStreaming(true);
-            sf.setProvider(p);
+            JAXBElementProvider p1 = new JAXBElementProvider();
+            p1.setEnableBuffering(true);
+            p1.setEnableStreaming(true);
+            
+            JAXBElementProvider p2 = new CustomJaxbProvider();
+            p2.setProduceMediaTypes(Collections.singletonList("text/xml"));
+            
+            List<Object> providers = new ArrayList<Object>();
+            providers.add(p1);
+            providers.add(p2);
+            sf.setProviders(providers);
             sf.setAddress("http://localhost:9080/");
             Map<String, Object> properties = new HashMap<String, Object>();
             properties.put("org.apache.cxf.serviceloader-context", "true");
@@ -85,6 +99,12 @@
                       "application/xml", 200);
     }
     
+    @Test
+    public void testGetBookUsingStaxWriter() throws Exception {
+        getAndCompare("http://localhost:9080/bookstore/books/123",
+                      "text/xml", 200);
+    }
+    
     private void getAndCompare(String address, 
                                String acceptType,
                                int expectedStatus) throws Exception {
@@ -107,4 +127,16 @@
         Unmarshaller u = c.createUnmarshaller();
         return (Book)u.unmarshal(is);
     }
+    
+    @Ignore
+    public static class CustomJaxbProvider extends JAXBElementProvider {
+        @Override
+        protected XMLStreamWriter getStreamWriter(Object obj, OutputStream os, MediaType mt) {
+            if (mt.equals(MediaType.TEXT_XML_TYPE)) {
+                return new CachingXmlEventWriter();
+            } else {
+                throw new RuntimeException();
+            }
+        }
+    }
 }