You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2021/04/27 05:25:21 UTC

[tomee-jakarta] 04/04: Re-ordered CXF sorting

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 <da...@gmail.com>
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,