[jira] [Created] (CXF-7966) Beanspector throws IllegalArgumentException when dealing with overridden methods

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Created] (CXF-7966) Beanspector throws IllegalArgumentException when dealing with overridden methods

JIRA jira@apache.org
matteo rulli created CXF-7966:
---------------------------------

             Summary: Beanspector throws IllegalArgumentException when dealing with overridden methods
                 Key: CXF-7966
                 URL: https://issues.apache.org/jira/browse/CXF-7966
             Project: CXF
          Issue Type: Improvement
            Reporter: matteo rulli


Let's consider the following pojos: 

{code:java}
public class A { 
        private String value; 

        public String getValue()\{ ... } 
        public void setValue(String value) \{ ... } 


public class B { 
        
        private A aValue; 

        public A getAValue()\{ ... } 
        public void setAValue(A avalue) \{ ... } 

{code}

And assume one extends these pojos and decorates them with JPA annotations. 

To leverage CXF org.apache.cxf.jaxrs.ext.search.SearchContext and JPACriteriaQueryVisitor as explained in the docs ([http://cxf.apache.org/docs/jax-rs-search.html#JAX-RSSearch-JPA2.0]) and perform searches like 
{code:java}
_s=aValue==*search token* {code}
in OpenJPA one has to override the EntityB.getAValue as follows: 

{code:java}
@Entity 
// ... other JPA annotations are omitted 
public class EntityB extends B { 
        
        @Override 
        // We need to specialize return type to EntityA to make SearchContext work 
        public EntityA getAValue()\{ ... } 

        // This method definition is needed to avoid java.lang.VerifyError from JPA provider 
        public void setAValue(EntityA avalue) \{ ... } 

{code}

But with this scenario, the current implementation of org.apache.cxf.jaxrs.ext.search.Beanspector<T> fails, throwing IllegalArgumentException: Accessor 'aValue' type mismatch, getter type is X while setter type is Y, X and Y depending on the order of the EntityB's methods as returned by the Class.getMethods(). 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)