Jamie Mark Goodyear created CXF-8996:
----------------------------------------

             Summary: JAXRS Bean introspection utility Beanspector relies on 
Class.getMethods natural order
                 Key: CXF-8996
                 URL: https://issues.apache.org/jira/browse/CXF-8996
             Project: CXF
          Issue Type: Improvement
          Components: JAX-RS
    Affects Versions: 4.0.4
            Reporter: Jamie Mark Goodyear
             Fix For: 4.0.5


JAXRS Bean introspection utility Beanspector relies on Class.getMethods natural 
order.
For most JVMs the Beanspector Tests will pass, however IBM Java does not return 
methods in the same ordering. Note: Class.getMethods does not provide a 
prescribed ordering of methods.

When CXF 4.0.x main branch is built, we'll observe:

{{Apache CXF JAX-RS Extensions: Search fails.}}
{{{}[ERROR] Failures:{}}}{{{}[ERROR] 
org.apache.cxf.jaxrs.ext.search.BeanspectorTest.testMismatchedOverriddenBeans{}}}{{{}[ERROR]
   Run 1: BeanspectorTest.testMismatchedOverriddenBeans Expected exception: 
java.lang.IllegalArgumentException{}}}{{{}[ERROR]   Run 2: 
BeanspectorTest.testMismatchedOverriddenBeans Expected exception: 
java.lang.IllegalArgumentException{}}}{{{}[ERROR]   Run 3: 
BeanspectorTest.testMismatchedOverriddenBeans Expected exception: 
java.lang.IllegalArgumentException{}}}{{{}[ERROR]   Run 4: 
BeanspectorTest.testMismatchedOverriddenBeans Expected exception: 
java.lang.IllegalArgumentException{}}}

{{{}[ERROR] 
org.apache.cxf.jaxrs.ext.search.BeanspectorTest.testMismatchedOverriddenBeans - 
Time elapsed: 0.001 s <<< FAILURE!{}}}{{{}java.lang.AssertionError: Expected 
exception: java.lang.IllegalArgumentException{}}}

We can improve this behaviour by detecting when IBM Java is in use, and having 
IBM process declared methods first, then process remaining methods. This will 
make IBM behave more like other JVMs. 

I will provide a PR with the change in place. Currently testing on a variety of 
platforms/JVMs to ensure tests pass.



{{//Class.getMethods does not provide an ordering.}}
{{//IBM Java tends to have a different ordering than other JVMs, so process 
declared methods first.}}
{{//Process remaining methods after to not miss getter/setters.}}
{{if ("IBM Corporation".equals(System.getProperty("java.vendor"))) {}}
{{processMethods(tclass.getDeclaredMethods());}}
{{}}}
{{processMethods(tclass.getMethods());}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to