This is an automated email from the ASF dual-hosted git repository. dblevins pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomee-jakarta.git
commit 02fded0029241ed4ad668fcbffa3127401298206 Author: David Blevins <[email protected]> AuthorDate: Mon Apr 26 22:24:59 2021 -0700 Re-ordered CXF sorting --- .../apache/cxf/jaxrs/provider/ProviderFactory.java | 107 ++++++++++----------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/transform/src/patch/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java b/transform/src/patch/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java index cabe51c..fcdb084 100644 --- a/transform/src/patch/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java +++ b/transform/src/patch/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java @@ -735,18 +735,17 @@ public abstract class ProviderFactory { * x/y;q=1.0 < x/y;q=0.7. */ private void sortReaders() { - if (!customComparatorAvailable(MessageBodyReader.class)) { - messageReaders.sort(new MessageBodyReaderComparator()); - } else { - doCustomSort(messageReaders); - } + messageReaders.sort(MessageBodyReaderComparator::sortPriorityAnnotation); + messageReaders.sort(MessageBodyReaderComparator::sortCustomProviders); + messageReaders.sort(MessageBodyReaderComparator::sortMediaTypes); + messageReaders.sort(MessageBodyReaderComparator::sortClasses); } + private <T> void sortWriters() { - if (!customComparatorAvailable(MessageBodyWriter.class)) { - messageWriters.sort(new MessageBodyWriterComparator()); - } else { - doCustomSort(messageWriters); - } + messageWriters.sort(MessageBodyWriterComparator::sortPriorityAnnotation); + messageWriters.sort(MessageBodyWriterComparator::sortCustomProviders); + messageWriters.sort(MessageBodyWriterComparator::sortProduceTypes); + messageWriters.sort(MessageBodyWriterComparator::sortClasses); } private boolean customComparatorAvailable(Class<?> providerClass) { @@ -859,64 +858,64 @@ public abstract class ProviderFactory { setProviders(true, false, userProviders.toArray()); } - private static class MessageBodyReaderComparator - implements Comparator<ProviderInfo<MessageBodyReader<?>>> { + private static class MessageBodyReaderComparator { + + public static int sortPriorityAnnotation(final ProviderInfo<MessageBodyReader<?>> p1, final ProviderInfo<MessageBodyReader<?>> p2) { + return comparePriorityStatus(p1.getProvider().getClass(), p2.getProvider().getClass()); + } - public int compare(ProviderInfo<MessageBodyReader<?>> p1, - ProviderInfo<MessageBodyReader<?>> p2) { + public static int sortCustomProviders(final ProviderInfo<MessageBodyReader<?>> p1, final ProviderInfo<MessageBodyReader<?>> p2) { + int result; + result = compareCustomStatus(p1, p2); + return result; + } + + public static int sortClasses(final ProviderInfo<MessageBodyReader<?>> p1, final ProviderInfo<MessageBodyReader<?>> p2) { MessageBodyReader<?> e1 = p1.getProvider(); MessageBodyReader<?> e2 = p2.getProvider(); + int result; + result = compareClasses(e1, e2); + return result; + } - List<MediaType> types1 = JAXRSUtils.getProviderConsumeTypes(e1); + public static int sortMediaTypes(final ProviderInfo<MessageBodyReader<?>> p1, final ProviderInfo<MessageBodyReader<?>> p2) { + List<MediaType> types1 = JAXRSUtils.getProviderConsumeTypes(p1.getProvider()); types1 = JAXRSUtils.sortMediaTypes(types1, null); - List<MediaType> types2 = JAXRSUtils.getProviderConsumeTypes(e2); + + List<MediaType> types2 = JAXRSUtils.getProviderConsumeTypes(p2.getProvider()); types2 = JAXRSUtils.sortMediaTypes(types2, null); - int result = JAXRSUtils.compareSortedMediaTypes(types1, types2, null); - if (result != 0) { - return result; - } - result = compareClasses(e1, e2); - if (result != 0) { - return result; - } - result = compareCustomStatus(p1, p2); - if (result != 0) { - return result; - } - return comparePriorityStatus(p1.getProvider().getClass(), p2.getProvider().getClass()); + return JAXRSUtils.compareSortedMediaTypes(types1, types2, null); } } - private static class MessageBodyWriterComparator - implements Comparator<ProviderInfo<MessageBodyWriter<?>>> { - - public int compare(ProviderInfo<MessageBodyWriter<?>> p1, - ProviderInfo<MessageBodyWriter<?>> p2) { - MessageBodyWriter<?> e1 = p1.getProvider(); - MessageBodyWriter<?> e2 = p2.getProvider(); + private static class MessageBodyWriterComparator { - List<MediaType> types1 = - JAXRSUtils.sortMediaTypes(JAXRSUtils.getProviderProduceTypes(e1), JAXRSUtils.MEDIA_TYPE_QS_PARAM); - List<MediaType> types2 = - JAXRSUtils.sortMediaTypes(JAXRSUtils.getProviderProduceTypes(e2), JAXRSUtils.MEDIA_TYPE_QS_PARAM); + public static int sortPriorityAnnotation(final ProviderInfo<MessageBodyWriter<?>> p1, final ProviderInfo<MessageBodyWriter<?>> p2) { + return comparePriorityStatus(p1.getProvider().getClass(), p2.getProvider().getClass()); + } - int result = JAXRSUtils.compareSortedMediaTypes(types1, types2, JAXRSUtils.MEDIA_TYPE_QS_PARAM); - if (result != 0) { - return result; - } + public static int sortCustomProviders(final ProviderInfo<MessageBodyWriter<?>> p1, final ProviderInfo<MessageBodyWriter<?>> p2) { + int result; + result = compareCustomStatus(p1, p2); + return result; + } - result = compareClasses(e1, e2); - if (result != 0) { - return result; - } + public static int sortClasses(final ProviderInfo<MessageBodyWriter<?>> p1, final ProviderInfo<MessageBodyWriter<?>> p2) { + int result; + result = compareClasses(p1.getProvider(), p2.getProvider()); + return result; + } - result = compareCustomStatus(p1, p2); - if (result != 0) { - return result; - } + public static int sortProduceTypes(final ProviderInfo<MessageBodyWriter<?>> p1, final ProviderInfo<MessageBodyWriter<?>> p2) { + List<MediaType> types1 = + JAXRSUtils.sortMediaTypes(JAXRSUtils.getProviderProduceTypes(p1.getProvider()), JAXRSUtils.MEDIA_TYPE_QS_PARAM); + List<MediaType> types2 = + JAXRSUtils.sortMediaTypes(JAXRSUtils.getProviderProduceTypes(p2.getProvider()), JAXRSUtils.MEDIA_TYPE_QS_PARAM); - return comparePriorityStatus(p1.getProvider().getClass(), p2.getProvider().getClass()); + int result; + result = JAXRSUtils.compareSortedMediaTypes(types1, types2, JAXRSUtils.MEDIA_TYPE_QS_PARAM); + return result; } } @@ -1143,7 +1142,7 @@ public abstract class ProviderFactory { return -1; } - private static Type[] getGenericInterfaces(Class<?> cls, Class<?> expectedClass) { + public static Type[] getGenericInterfaces(Class<?> cls, Class<?> expectedClass) { return getGenericInterfaces(cls, expectedClass, Object.class); } private static Type[] getGenericInterfaces(Class<?> cls, Class<?> expectedClass,
