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 6082E18830 for ; Wed, 12 Aug 2015 16:18:45 +0000 (UTC) Received: (qmail 21410 invoked by uid 500); 12 Aug 2015 16:18:32 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 21340 invoked by uid 500); 12 Aug 2015 16:18:32 -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 21331 invoked by uid 99); 12 Aug 2015 16:18:32 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Aug 2015 16:18:32 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 7F153E00CC; Wed, 12 Aug 2015 16:18:32 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sergeyb@apache.org To: commits@cxf.apache.org Message-Id: <218b1e23a6c2435dac50c34ff3bf8012@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: cxf git commit: [CXF-6515] Optionally passing provider objects directly Date: Wed, 12 Aug 2015 16:18:32 +0000 (UTC) Repository: cxf Updated Branches: refs/heads/3.0.x-fixes c3e504710 -> 128a58093 [CXF-6515] Optionally passing provider objects directly Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/128a5809 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/128a5809 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/128a5809 Branch: refs/heads/3.0.x-fixes Commit: 128a58093c90990c99ffe04081dc3c919d008c39 Parents: c3e5047 Author: Sergey Beryozkin Authored: Wed Aug 12 17:17:34 2015 +0100 Committer: Sergey Beryozkin Committed: Wed Aug 12 17:18:16 2015 +0100 ---------------------------------------------------------------------- .../cxf/jaxrs/provider/ProviderFactory.java | 25 ++++++++++++---- .../cxf/jaxrs/provider/ProviderFactoryTest.java | 30 ++++++++++++++++++++ 2 files changed, 50 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/128a5809/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java index 73a3234..b9075b0 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java @@ -593,16 +593,24 @@ public abstract class ProviderFactory { return true; } } + } else if (type == Object.class) { + return true; } } return false; } + @SuppressWarnings("unchecked") private void doCustomSort(List listOfProviders) { - @SuppressWarnings("unchecked") + Comparator theProviderComparator = providerComparator; + Type type = ((ParameterizedType)providerComparator.getClass() + .getGenericInterfaces()[0]).getActualTypeArguments()[0]; + if (type == Object.class) { + theProviderComparator = + (Comparator)(new ProviderInfoClassComparator((Comparator)theProviderComparator)); + } List theProviders = (List)listOfProviders; - @SuppressWarnings("unchecked") - Comparator theComparator = (Comparator)providerComparator; + Comparator theComparator = (Comparator)theProviderComparator; Collections.sort((List)theProviders, theComparator); } @@ -876,14 +884,20 @@ public abstract class ProviderFactory { return compareClasses(expectedCls, em1, em2); } } + public static class ProviderInfoClassComparator implements Comparator> { - private ClassComparator comp; + private Comparator comp; + private boolean defaultComp; public ProviderInfoClassComparator(Class expectedCls) { this.comp = new ClassComparator(expectedCls); + this.defaultComp = true; + } + public ProviderInfoClassComparator(Comparator comp) { + this.comp = comp; } public int compare(ProviderInfo p1, ProviderInfo p2) { int result = comp.compare(p1.getProvider(), p2.getProvider()); - if (result == 0) { + if (result == 0 && defaultComp) { result = compareCustomStatus(p1, p2); } return result; @@ -1210,4 +1224,5 @@ public abstract class ProviderFactory { sortReaders(); sortWriters(); } + } http://git-wip-us.apache.org/repos/asf/cxf/blob/128a5809/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java index 199f227..7f6b209 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java @@ -133,6 +133,36 @@ public class ProviderFactoryTest extends Assert { Object lastReader = readers.get(7).getProvider(); assertTrue(lastReader instanceof StringTextProvider); } + @Test + public void testCustomProviderSorting2() { + ProviderFactory pf = ServerProviderFactory.getInstance(); + Comparator comp = new Comparator() { + + @Override + public int compare(Object provider1, Object provider2) { + if (provider1 instanceof StringTextProvider) { + return 1; + } else if (provider2 instanceof StringTextProvider) { + return -1; + } else { + return 0; + } + } + + }; + pf.setProviderComparator(comp); + + // writers + List>> writers = pf.getMessageWriters(); + assertEquals(8, writers.size()); + Object lastWriter = writers.get(7).getProvider(); + assertTrue(lastWriter instanceof StringTextProvider); + //readers + List>> readers = pf.getMessageReaders(); + assertEquals(8, readers.size()); + Object lastReader = readers.get(7).getProvider(); + assertTrue(lastReader instanceof StringTextProvider); + } @SuppressWarnings("rawtypes") @Test public void testCustomProviderSortingMBROnly() {