Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 86C8BDFAB for ; Tue, 18 Sep 2012 14:18:31 +0000 (UTC) Received: (qmail 70790 invoked by uid 500); 18 Sep 2012 14:18:31 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 70744 invoked by uid 500); 18 Sep 2012 14:18:31 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 70737 invoked by uid 99); 18 Sep 2012 14:18:31 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Sep 2012 14:18:31 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Sep 2012 14:18:26 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id CAD3323888E4; Tue, 18 Sep 2012 14:17:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1387178 - in /cxf/branches/2.6.x-fixes: ./ rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/ rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ rt/rs/extensions/providers/src/test/java/org/ap... Date: Tue, 18 Sep 2012 14:17:41 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120918141741.CAD3323888E4@eris.apache.org> Author: sergeyb Date: Tue Sep 18 14:17:40 2012 New Revision: 1387178 URL: http://svn.apache.org/viewvc?rev=1387178&view=rev Log: Merged revisions 1384254,1387145,1387148 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1384254 | sergeyb | 2012-09-13 10:40:02 +0100 (Thu, 13 Sep 2012) | 1 line Relaxing the type safety of AtomPojoProvider as a single provider needs to handle both feed and entry Pojos, registering a provider typed on a feed Pojo from Eclipse prevents the runtime from selecting it when a Pojo representing an entry is returned from the resource ........ r1387145 | sergeyb | 2012-09-18 14:28:05 +0100 (Tue, 18 Sep 2012) | 1 line Making it simpler customize Abdera writers ........ r1387148 | sergeyb | 2012-09-18 14:33:43 +0100 (Tue, 18 Sep 2012) | 1 line Making it simpler customize Abdera writers, actual change missed ........ Added: cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java - copied unchanged from r1384254, cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java Removed: cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/ProviderFactoryJsonTest.java Modified: cxf/branches/2.6.x-fixes/ (props changed) cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AbstractAtomProvider.java cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProviderTest.java Propchange: cxf/branches/2.6.x-fixes/ ------------------------------------------------------------------------------ Merged /cxf/trunk:r1384254,1387145-1387148 Propchange: cxf/branches/2.6.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AbstractAtomProvider.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AbstractAtomProvider.java?rev=1387178&r1=1387177&r2=1387178&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AbstractAtomProvider.java (original) +++ cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AbstractAtomProvider.java Tue Sep 18 14:17:40 2012 @@ -24,7 +24,9 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.util.logging.Logger; +import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; @@ -34,10 +36,12 @@ import org.apache.abdera.Abdera; import org.apache.abdera.model.Document; import org.apache.abdera.model.Element; import org.apache.abdera.writer.Writer; +import org.apache.cxf.common.logging.LogUtils; public abstract class AbstractAtomProvider implements MessageBodyWriter, MessageBodyReader { + private static final Logger LOG = LogUtils.getL7dLogger(AbstractAtomProvider.class); private static final Abdera ATOM_ENGINE = new Abdera(); private boolean formattedOutput; @@ -50,16 +54,31 @@ public abstract class AbstractAtomProvid MediaType mt, MultivaluedMap headers, OutputStream os) throws IOException { if (MediaType.APPLICATION_JSON_TYPE.isCompatible(mt)) { - Writer w = ATOM_ENGINE.getWriterFactory().getWriter("json"); + Writer w = createWriter("json"); + if (w == null) { + throw new WebApplicationException(415); + } element.writeTo(w, os); } else if (formattedOutput) { - Writer w = ATOM_ENGINE.getWriterFactory().getWriter("prettyxml"); - element.writeTo(w, os); + Writer w = createWriter("prettyxml"); + if (w != null) { + element.writeTo(w, os); + } else { + element.writeTo(os); + } } else { element.writeTo(os); } } + protected Writer createWriter(String writerName) { + Writer w = ATOM_ENGINE.getWriterFactory().getWriter(writerName); + if (w == null) { + LOG.fine("Atom writer \"" + writerName + "\" is not available"); + } + return w; + } + public T readFrom(Class clazz, Type t, Annotation[] a, MediaType mt, MultivaluedMap headers, InputStream is) throws IOException { Modified: cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java?rev=1387178&r1=1387177&r2=1387178&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java (original) +++ cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java Tue Sep 18 14:17:40 2012 @@ -65,14 +65,14 @@ import org.apache.cxf.jaxrs.utils.Inject @Produces({"application/atom+xml", "application/atom+xml;type=feed", "application/atom+xml;type=entry" }) @Consumes({"application/atom+xml", "application/atom+xml;type=feed", "application/atom+xml;type=entry" }) @Provider -public class AtomPojoProvider extends AbstractConfigurableProvider - implements MessageBodyWriter, MessageBodyReader { +public class AtomPojoProvider extends AbstractConfigurableProvider + implements MessageBodyWriter, MessageBodyReader { private static final Logger LOG = LogUtils.getL7dLogger(AtomPojoProvider.class); private static final Abdera ATOM_ENGINE = new Abdera(); private static final String DEFAULT_ENTRY_CONTENT_METHOD = "getContent"; - private JAXBElementProvider jaxbProvider = new JAXBElementProvider(); + private JAXBElementProvider jaxbProvider = new JAXBElementProvider(); private Map collectionGetters = Collections.emptyMap(); private Map collectionSetters = Collections.emptyMap(); private Map> atomWriters = Collections.emptyMap(); @@ -117,7 +117,7 @@ public class AtomPojoProvider extends } } - public long getSize(T t, Class type, Type genericType, Annotation[] annotations, MediaType mt) { + public long getSize(Object t, Class type, Type genericType, Annotation[] annotations, MediaType mt) { return -1; } @@ -133,11 +133,11 @@ public class AtomPojoProvider extends return !Feed.class.isAssignableFrom(type) && !Entry.class.isAssignableFrom(type); } - public void writeTo(T o, Class clazz, Type genericType, Annotation[] annotations, + public void writeTo(Object o, Class cls, Type genericType, Annotation[] annotations, MediaType mt, MultivaluedMap headers, OutputStream os) throws IOException { boolean isFeed = isFeedRequested(mt); - boolean isCollection = InjectionUtils.isSupportedCollectionOrArray(clazz); + boolean isCollection = InjectionUtils.isSupportedCollectionOrArray(cls); if (isFeed && isCollection) { @@ -151,8 +151,6 @@ public class AtomPojoProvider extends if (isFeed && !isCollection) { atomElement = createFeedFromCollectionWrapper(o); } else if (!isFeed && !isCollection) { - @SuppressWarnings("unchecked") - Class cls = (Class)clazz; atomElement = createEntryFromObject(o, cls); } } catch (Exception ex) { @@ -233,15 +231,14 @@ public class AtomPojoProvider extends return false; } - protected void setFeedFromCollection(Factory factory, Feed feed, X wrapper, + protected void setFeedFromCollection(Factory factory, Feed feed, Object wrapper, Object collection, Class collectionCls, Type collectionType, boolean writerUsed) throws Exception { Object[] arr = collectionCls.isArray() ? (Object[])collection : ((Collection)collection).toArray(); - @SuppressWarnings("unchecked") - Class memberClass = (Class)InjectionUtils.getActualType(collectionType); + Class memberClass = InjectionUtils.getActualType(collectionType); for (Object o : arr) { Entry entry = createEntryFromObject(o, memberClass); @@ -253,17 +250,17 @@ public class AtomPojoProvider extends } @SuppressWarnings("unchecked") - protected void setFeedProperties(Factory factory, Feed feed, X wrapper, Object collection, + protected void setFeedProperties(Factory factory, Feed feed, Object wrapper, Object collection, Class collectionCls, Type collectionType) { - AbstractAtomElementBuilder builder - = (AbstractAtomElementBuilder)atomBuilders.get(wrapper.getClass().getName()); + AbstractAtomElementBuilder builder + = (AbstractAtomElementBuilder)atomBuilders.get(wrapper.getClass().getName()); if (builder == null) { return; } setCommonElementProperties(factory, feed, builder, wrapper); - AbstractFeedBuilder theBuilder = (AbstractFeedBuilder)builder; + AbstractFeedBuilder theBuilder = (AbstractFeedBuilder)builder; // the hierarchy is a bit broken in that we can not set author/title.etc on some // common Feed/Entry super type @@ -325,7 +322,7 @@ public class AtomPojoProvider extends - protected Entry createEntryFromObject(X o, Class cls) throws Exception { + protected Entry createEntryFromObject(Object o, Class cls) throws Exception { Factory factory = Abdera.getNewFactory(); Entry entry = factory.getAbdera().newEntry(); @@ -377,18 +374,18 @@ public class AtomPojoProvider extends e.getContentElement().setValue(content); } - protected void setEntryProperties(Factory factory, Entry entry, - X o, Class cls) { + protected void setEntryProperties(Factory factory, Entry entry, + Object o, Class cls) { @SuppressWarnings("unchecked") - AbstractAtomElementBuilder builder - = (AbstractAtomElementBuilder)atomBuilders.get(o.getClass().getName()); + AbstractAtomElementBuilder builder + = (AbstractAtomElementBuilder)atomBuilders.get(o.getClass().getName()); if (builder == null) { return; } setCommonElementProperties(factory, entry, builder, o); - AbstractEntryBuilder theBuilder = (AbstractEntryBuilder)builder; + AbstractEntryBuilder theBuilder = (AbstractEntryBuilder)builder; String author = theBuilder.getAuthor(o); if (author != null) { entry.addAuthor(author); @@ -448,9 +445,9 @@ public class AtomPojoProvider extends } - private void setCommonElementProperties(Factory factory, ExtensibleElement element, - AbstractAtomElementBuilder builder, - X o) { + private void setCommonElementProperties(Factory factory, ExtensibleElement element, + AbstractAtomElementBuilder builder, + Object o) { String baseUri = builder.getBaseUri(o); if (baseUri != null) { element.setBaseUri(baseUri); @@ -492,7 +489,7 @@ public class AtomPojoProvider extends return true; } - public T readFrom(Class cls, Type type, Annotation[] anns, MediaType mt, + public Object readFrom(Class cls, Type type, Annotation[] anns, MediaType mt, MultivaluedMap headers, InputStream is) throws IOException, WebApplicationException { boolean isFeed = isFeedRequested(mt); @@ -507,7 +504,7 @@ public class AtomPojoProvider extends } @SuppressWarnings("unchecked") - private T readFromFeed(Class cls, MediaType mt, + private Object readFromFeed(Class cls, MediaType mt, MultivaluedMap headers, InputStream is) throws IOException { @@ -516,9 +513,9 @@ public class AtomPojoProvider extends AtomElementReader reader = atomReaders.get(cls.getName()); if (reader != null) { - return ((AtomElementReader)reader).readFrom(feed); + return ((AtomElementReader)reader).readFrom(feed); } - T instance = null; + Object instance = null; try { String methodName = getCollectionMethod(cls, false); Method m = cls.getMethod(methodName, new Class[]{List.class}); @@ -538,13 +535,13 @@ public class AtomPojoProvider extends } @SuppressWarnings("unchecked") - private X readFromEntry(Entry entry, Class cls, MediaType mt, + private Object readFromEntry(Entry entry, Class cls, MediaType mt, MultivaluedMap headers, InputStream is) throws IOException { AtomElementReader reader = atomReaders.get(cls.getName()); if (reader != null) { - return ((AtomElementReader)reader).readFrom(entry); + return ((AtomElementReader)reader).readFrom(entry); } try { Unmarshaller um = Modified: cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProviderTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProviderTest.java?rev=1387178&r1=1387177&r2=1387178&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProviderTest.java (original) +++ cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProviderTest.java Tue Sep 18 14:17:40 2012 @@ -39,6 +39,7 @@ import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; + public class AtomPojoProviderTest extends Assert { private ClassPathXmlApplicationContext ctx; @@ -52,8 +53,7 @@ public class AtomPojoProviderTest extend @Test public void testWriteFeedWithBuilders() throws Exception { - @SuppressWarnings("unchecked") - AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom"); + AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom"); assertNotNull(provider); provider.setFormattedOutput(true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -76,8 +76,7 @@ public class AtomPojoProviderTest extend @Test public void testWriteFeedWithBuildersNoJaxb() throws Exception { - @SuppressWarnings("unchecked") - AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atomNoJaxb"); + AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atomNoJaxb"); assertNotNull(provider); provider.setFormattedOutput(true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -110,8 +109,7 @@ public class AtomPojoProviderTest extend @Test public void testWriteEntryWithBuilders() throws Exception { - @SuppressWarnings("unchecked") - AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom2"); + AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom2"); assertNotNull(provider); provider.setFormattedOutput(true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); @@ -125,25 +123,24 @@ public class AtomPojoProviderTest extend @Test public void testReadEntryWithBuilders() throws Exception { - @SuppressWarnings("unchecked") - AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom3"); + AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom3"); assertNotNull(provider); doTestReadEntry(provider); } @Test public void testReadEntryWithoutBuilders() throws Exception { - doTestReadEntry(new AtomPojoProvider()); + doTestReadEntry(new AtomPojoProvider()); } - private void doTestReadEntry(AtomPojoProvider provider) throws Exception { + private void doTestReadEntry(AtomPojoProvider provider) throws Exception { provider.setFormattedOutput(true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); MediaType mt = MediaType.valueOf("application/atom+xml;type=entry"); provider.writeTo(new Book("a"), Book.class, Book.class, new Annotation[]{}, mt, null, bos); - //System.out.println(bos.toString()); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); - Book book = (Book)provider.readFrom(Book.class, Book.class, + @SuppressWarnings({"unchecked", "rawtypes" }) + Book book = (Book)provider.readFrom((Class)Book.class, Book.class, new Annotation[]{}, mt, null, bis); assertEquals("a", book.getName()); } @@ -151,19 +148,18 @@ public class AtomPojoProviderTest extend @Test public void testReadFeedWithBuilders() throws Exception { - @SuppressWarnings("unchecked") - AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom4"); + AtomPojoProvider provider = (AtomPojoProvider)ctx.getBean("atom4"); assertNotNull(provider); doTestReadFeed(provider); } @Test public void testReadFeedWithoutBuilders() throws Exception { - AtomPojoProvider provider = new AtomPojoProvider(); + AtomPojoProvider provider = new AtomPojoProvider(); doTestReadFeed(provider); } - private void doTestReadFeed(AtomPojoProvider provider) throws Exception { + private void doTestReadFeed(AtomPojoProvider provider) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); MediaType mt = MediaType.valueOf("application/atom+xml;type=feed"); Books books = new Books(); @@ -173,7 +169,8 @@ public class AtomPojoProviderTest extend books.setBooks(bs); provider.writeTo(books, Books.class, Books.class, new Annotation[]{}, mt, null, bos); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); - Books books2 = provider.readFrom(Books.class, Books.class, + @SuppressWarnings({"unchecked", "rawtypes" }) + Books books2 = (Books)provider.readFrom((Class)Books.class, Books.class, new Annotation[]{}, mt, null, bis); List list = books2.getBooks(); assertEquals(2, list.size());