andymc12 closed pull request #323: Handle @Priority on ExceptionMappers
URL: https://github.com/apache/cxf/pull/323
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 efd5a4c73c2..e1af3fbf605 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
@@ -858,7 +858,7 @@ private static int compareCustomStatus(ProviderInfo<?> p1, 
ProviderInfo<?> p2) {
         return result;
     }
 
-    private static int comparePriorityStatus(Class<?> cl1, Class<?> cl2) {
+    static int comparePriorityStatus(Class<?> cl1, Class<?> cl2) {
         Integer value1 = AnnotationUtils.getBindingPriority(cl1);
         Integer value2 = AnnotationUtils.getBindingPriority(cl2);
         return value1.compareTo(value2);
diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
index b9003aa962b..dbacd48c3a1 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
@@ -598,7 +598,11 @@ public int compare(ProviderInfo<?> p1, ProviderInfo<?> p2) 
{
                     return -1;
                 }
             }
-            return super.compare(p1, p2);
+            int result = super.compare(p1, p2);
+            if (result == 0) {
+                result = comparePriorityStatus(p1.getProvider().getClass(), 
p2.getProvider().getClass());
+            }
+            return result;
         }
     }
 
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 3bf35e1194e..8f9a89f6f32 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
@@ -886,6 +886,52 @@ public void testSortContextResolverByPriorityReversed() {
                    pf.createContextResolver(String.class, m, 
MediaType.TEXT_PLAIN_TYPE).getContext(null));
     }
 
+    @Test
+    public void testSortExceptionMapperByPriority() {
+        ServerProviderFactory pf = ServerProviderFactory.getInstance();
+        List<Object> providers = new ArrayList<>();
+        LowPriorityExceptionMapper lowMapper = new 
LowPriorityExceptionMapper();
+        providers.add(lowMapper);
+        HighPriorityExceptionMapper highMapper = new 
HighPriorityExceptionMapper();
+        providers.add(highMapper);
+        pf.setUserProviders(providers);
+        Message m = new MessageImpl();
+        assertEquals(Response.ok().build().getStatus(),
+                     pf.createExceptionMapper(RuntimeException.class, 
m).toResponse(null).getStatus());
+    }
+
+    @Test
+    public void testSortExceptionMapperByPriorityReversed() {
+        ServerProviderFactory pf = ServerProviderFactory.getInstance();
+        List<Object> providers = new ArrayList<>();
+        HighPriorityExceptionMapper highMapper = new 
HighPriorityExceptionMapper();
+        providers.add(highMapper);
+        LowPriorityExceptionMapper lowMapper = new 
LowPriorityExceptionMapper();
+        providers.add(lowMapper);
+        pf.setUserProviders(providers);
+        Message m = new MessageImpl();
+        assertEquals(Response.ok().build().getStatus(),
+                   pf.createExceptionMapper(RuntimeException.class, 
m).toResponse(null).getStatus());
+    }
+
+    @Priority(1001)
+    private static class HighPriorityExceptionMapper implements 
ExceptionMapper<Exception> {
+
+        @Override
+        public Response toResponse(Exception exception) {
+            return Response.ok().build();
+        }
+    }
+
+    @Priority(2001)
+    private static class LowPriorityExceptionMapper implements 
ExceptionMapper<Exception> {
+
+        @Override
+        public Response toResponse(Exception exception) {
+            return Response.noContent().build();
+        }
+    }
+
     private static class TestRuntimeExceptionMapper implements 
ExceptionMapper<RuntimeException> {
 
         public Response toResponse(RuntimeException exception) {


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to