You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by ceineke <ch...@ek3.com> on 2012/02/21 17:28:40 UTC

StackOverflowError when invoking WADL generator

When requesting a WADL from my service running CXF v2.4.6, I get the
following exception:

java.lang.StackOverflowError
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:314)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:243)
	at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
	at
org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1632)
	at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at
sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:113)
	at
sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
	at
sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
	at
sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:388)
	at
sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:199)
	at
sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:87)
	at
sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
	at java.lang.reflect.Method.declaredAnnotations(Method.java:714)
	at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:707)
	at
java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:193)
	at
org.apache.cxf.jaxrs.utils.InjectionUtils.canPropertyBeIgnored(InjectionUtils.java:1070)
	at
org.apache.cxf.jaxrs.utils.InjectionUtils.getParametersFromBeanClass(InjectionUtils.java:1059)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:547)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
        ... (previous line repeated about 990 times)

I'm not using MatrixParam annotation or enum values, so it's not CXF-2908.
Has anybody seen this before?


--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502689.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by Sergey Beryozkin <sb...@gmail.com>.
I've resolved after adding a check for recursive complex properties - as 
I said I could not reproduce with the info you gave me but the only 
thing I can think of that can cause it is having one of the complex 
properties recursing...

Cheers, Sergey

On 21/02/12 22:31, Sergey Beryozkin wrote:
> On 21/02/12 19:01, ceineke wrote:
>> Can you add the following to your jaxrs:providers section and see if your
>> testcase still works?
>>
>> <bean class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator">
>> <property name="applicationTitle" value="FooService"/>
>> <property name="singleResourceMultipleMethods" value="false"/>
>> <property name="addResourceAndMethodIds" value="true"/>
>> </bean>
>>
>
> I've no luck reproducing it, I really need complete (sample) Foo & FooTO
> and possibly other generated classes FooToo depends upon (DateTime ?).
> Alternatively, please try to eliminate individual Foo or FooTO
> properties (at the schema level for ex) before regenerating it in order
> to narrow down the property which causes it...
> Cheers, Sergey
>
>>
>> --
>> View this message in context:
>> http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5503079.html
>>
>> Sent from the cxf-user mailing list archive at Nabble.com.
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: StackOverflowError when invoking WADL generator

Posted by Sergey Beryozkin <sb...@gmail.com>.
On 21/02/12 19:01, ceineke wrote:
> Can you add the following to your jaxrs:providers section and see if your
> testcase still works?
>
>        <bean class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator">
>          <property name="applicationTitle" value="FooService"/>
>          <property name="singleResourceMultipleMethods" value="false"/>
>          <property name="addResourceAndMethodIds" value="true"/>
>        </bean>
>

I've no luck reproducing it, I really need complete (sample) Foo & FooTO 
and possibly other generated classes FooToo depends upon (DateTime ?). 
Alternatively, please try to eliminate individual Foo or FooTO 
properties (at the schema level for ex) before regenerating it in order 
to narrow down the property which causes it...
Cheers, Sergey

>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5503079.html
> Sent from the cxf-user mailing list archive at Nabble.com.



Re: StackOverflowError when invoking WADL generator

Posted by ceineke <ch...@ek3.com>.
Can you add the following to your jaxrs:providers section and see if your
testcase still works?

      <bean class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator">
        <property name="applicationTitle" value="FooService"/>
        <property name="singleResourceMultipleMethods" value="false"/>
        <property name="addResourceAndMethodIds" value="true"/>
      </bean>


--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5503079.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi
On 21/02/12 17:17, ceineke wrote:
>
> Sergey Beryozkin-5 wrote
>>
>> Can you post a sample bean class, similar to the one which is causing it
>> please ? How does a relevant method signature look like ?
>>
> Hello Sergey,
>
> I tracked down the cause for the stack overflow. Here are the relevant
> pieces of code. The method signature that's causing it is the following
> (with type names changed to protected the innocent):
>
>    @GET @Path("/foo")
>    Foo foo(@QueryParam("") Foo foo);
>
> Foo.java:
> public class Foo extends com.foo.FooTO { ... }
>
> FooTO.java:
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "", propOrder = {
>     ...
> })
> @XmlRootElement(name = "foo")
> public class Foo
>
>
> FooTO is generated by JAXB from an XSD which I reference in the
> jaxrs:schemaLocations section of my bean configuration file. I replaced
> FooPreview with void to rule it out as well.
>
> Any ideas?
>

I've done a quick test by using a bean class which extends the other 
bean class and it works, so obviously something in the classes you work 
with causes it. It is definitely not JAXB annotations...

So we have

public class Foo extends com.foo.FooTO {

    //....

}
public class FooTO {
    //...
}

Something in Foo or FooTO causes the generator to recurse indefinitely...
Please post more concrete samples

Thanks, Sergey
> --
> View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502833.html
> Sent from the cxf-user mailing list archive at Nabble.com.


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: StackOverflowError when invoking WADL generator

Posted by ceineke <ch...@ek3.com>.
Sorry, the return type of the method is FooResult, not Foo. The method is
_not_ using Foo as a method parameter and as the return type.

--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502836.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by ceineke <ch...@ek3.com>.
Sergey Beryozkin-5 wrote
> 
> Can you post a sample bean class, similar to the one which is causing it 
> please ? How does a relevant method signature look like ?
> 
Hello Sergey,

I tracked down the cause for the stack overflow. Here are the relevant
pieces of code. The method signature that's causing it is the following
(with type names changed to protected the innocent):

  @GET @Path("/foo")
  Foo foo(@QueryParam("") Foo foo);

Foo.java:
public class Foo extends com.foo.FooTO { ... }

FooTO.java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
   ...
})
@XmlRootElement(name = "foo")
public class Foo


FooTO is generated by JAXB from an XSD which I reference in the
jaxrs:schemaLocations section of my bean configuration file. I replaced
FooPreview with void to rule it out as well.

Any ideas?

--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502833.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by ceineke <ch...@ek3.com>.
Sergey Beryozkin-5 wrote
> 
> Please do, looking into it next
> 
CXF-4125

--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5503237.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by Sergey Beryozkin <sb...@gmail.com>.
On 21/02/12 18:26, ceineke wrote:
> Do you want me to raise a ticket with Jira?
Please do, looking into it next

Sergey
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502997.html
> Sent from the cxf-user mailing list archive at Nabble.com.


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: StackOverflowError when invoking WADL generator

Posted by ceineke <ch...@ek3.com>.
Do you want me to raise a ticket with Jira?

--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502997.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi
On 21/02/12 16:29, ceineke wrote:
> Geez, that got mangled pretty bad...
>
>
> java.lang.StackOverflowError
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:314)
> 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
> 	at
> org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:243)
> 	at
> org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
> 	at
> org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
> 	at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1632)
> 	at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
> 	at java.lang.Class.forName0(Native Method)
> 	at java.lang.Class.forName(Class.java:264)
> 	at
> sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:113)
> 	at
> sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
> 	at
> sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
> 	at
> sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:388)
> 	at
> sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:199)
> 	at
> sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:87)
> 	at
> sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
> 	at java.lang.reflect.Method.declaredAnnotations(Method.java:714)
> 	at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:707)
> 	at
> java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:193)
> 	at
> org.apache.cxf.jaxrs.utils.InjectionUtils.canPropertyBeIgnored(InjectionUtils.java:1070)
> 	at
> org.apache.cxf.jaxrs.utils.InjectionUtils.getParametersFromBeanClass(InjectionUtils.java:1059)
> 	at
> org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:547)
> 	at
> org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
> 	at
> org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
> 	at
> org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
>
Can you post a sample bean class, similar to the one which is causing it 
please ? How does a relevant method signature look like ?

Cheers, Sergey

>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502696.html
> Sent from the cxf-user mailing list archive at Nabble.com.

Re: StackOverflowError when invoking WADL generator

Posted by ceineke <ch...@ek3.com>.
Geez, that got mangled pretty bad...


java.lang.StackOverflowError
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:314)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:243)
	at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
	at
org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1632)
	at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at
sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:113)
	at
sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
	at
sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
	at
sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:388)
	at
sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:199)
	at
sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:87)
	at
sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
	at java.lang.reflect.Method.declaredAnnotations(Method.java:714)
	at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:707)
	at
java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:193)
	at
org.apache.cxf.jaxrs.utils.InjectionUtils.canPropertyBeIgnored(InjectionUtils.java:1070)
	at
org.apache.cxf.jaxrs.utils.InjectionUtils.getParametersFromBeanClass(InjectionUtils.java:1059)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:547)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)
	at
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.doWriteBeanParam(WadlGenerator.java:558)


--
View this message in context: http://cxf.547215.n5.nabble.com/StackOverflowError-when-invoking-WADL-generator-tp5502689p5502696.html
Sent from the cxf-user mailing list archive at Nabble.com.