Using a Java enum type in a JAX-RS matrix parameter results in a 
StackOverflowError when generating the WADL
------------------------------------------------------------------------------------------------------------

                 Key: CXF-2908
                 URL: https://issues.apache.org/jira/browse/CXF-2908
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS
    Affects Versions: 2.2.9
         Environment: Windows XP, Tomcat 6.0.20, JDK 1.6.0_19
            Reporter: Greg Katz


*Repro steps:*

1. Create a JAX-RS endpoint method that uses an object with an enum-typed 
property as a matrix parameter.
2. Hit the WADL URI for the endpoint's path (or "above" the endpoint's path). 
Something like {{http://host:port/rest?_wadl}}, in other words.

*Result:*

The {{org.apache.cxf.jaxrs.model.wadl.WadlGenerator}} throws a 
{{StackOverflowError}}.

{noformat}
ERROR 2010-07-23 09:45:09.417 http-8080-1>  Servlet.service() for servlet 
CXFServlet threw exception
java.lang.StackOverflowError
        at java.lang.Class.privateGetPublicMethods(Class.java:2536)
        at java.lang.Class.getMethods(Class.java:1410)
        at 
org.apache.cxf.jaxrs.utils.InjectionUtils.getParametersFromBeanClass(InjectionUtils.java:853)
        at 
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:447)
        at 
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:456)
        at 
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:456)
        at 
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:456)
        at 
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:456)
        ...
{noformat}

*Example code:*

{code:java}
@Path("/whatever")
@Produces("application/json")
public interface WhateverEndpoint {
    
    @GET
    @Path("/")
    public Whatever[] getWhatevers(@MatrixParam("")WhateverSearchCriteria 
criteria);

}

@XmlRootElement
public class WhateverSearchCriteria {

    private EnumType enumValue;

    public EnumType getEnumValue() {
        return enumValue;
    }

}

@XmlRootElement
public enum EnumType {

    Value1,
    Value2;

}
{code}

*Observations:*

When I commented out the enum-typed property, the {{StackOverflowError}} went 
away. 

I stepped through the {{WadlGenerator}} in the debugger and noticed something 
about {{getParametersFromBeanClass}} that might be the source of the problem. 
{{getParametersFromBeanClass}} gets all of the no-arg methods that begin with 
{{get}} and then discards "getClass". However, it doesn't discard the {{Enum}} 
class's {{getDeclaringClass}} method. This method returns an object of type 
{{java.lang.Class}}. In the debugger, I saw that all of the remaining 
{{doWriteBeanParam}} stack frames after the one whose {{type}} argument was the 
enum type had a {{type}} argument of {{java.lang.Class}}.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to