[ https://issues.apache.org/jira/browse/CXF-2908?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Beryozkin resolved CXF-2908. ----------------------------------- Assignee: Sergey Beryozkin Fix Version/s: 2.3 2.2.10 Resolution: Fixed > 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 > Assignee: Sergey Beryozkin > Fix For: 2.3, 2.2.10 > > > *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.