[ 
https://issues.apache.org/jira/browse/WICKET-6607?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukas Korten updated WICKET-6607:
---------------------------------
    Summary: NoSuchMethodError when using Spring Beans with constructor 
injection in an AjaxLink#onClick  (was: Spring Beans with constructor injection 
used in an AjaxLink#onClick)

> NoSuchMethodError when using Spring Beans with constructor injection in an 
> AjaxLink#onClick
> -------------------------------------------------------------------------------------------
>
>                 Key: WICKET-6607
>                 URL: https://issues.apache.org/jira/browse/WICKET-6607
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-cdi, wicket-core
>    Affects Versions: 8.1.0
>            Reporter: Lukas Korten
>            Priority: Major
>         Attachments: wicket-di.zip
>
>
> We are currently building a SpringBoot application with Wicket 8.1.0 and 
> using Constructor injection in the service layer. If a service that follows 
> this approach is injected into a Wicket component, the already known issue, 
> [reported on 
> stackoverflow|https://stackoverflow.com/questions/35260608/wicket-springbean-and-spring-autowired-with-injection-via-constructor],
>  occurs:
> {code:java}
> java.lang.IllegalArgumentException: Superclass has no null constructors but 
> no arguments were given at 
> net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931) 
> ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631) 
> ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
>  ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329)
>  ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492) ~[cglib-3.2.6.jar:na] 
> at 
> net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
>  ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
>  ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) 
> ~[cglib-3.2.6.jar:na] at 
> java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_131] at 
> net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) 
> ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) 
> ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116)
>  ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)
>  ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480) 
> ~[cglib-3.2.6.jar:na] at 
> net.sf.cglib.proxy.Enhancer.create(Enhancer.java:305) ~[cglib-3.2.6.jar:na] 
> at 
> org.apache.wicket.proxy.LazyInitProxyFactory.createProxy(LazyInitProxyFactory.java:192)
>  ~[wicket-ioc-8.1.0.jar:8.1.0] at 
> org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.getFieldValue(AnnotProxyFieldValueFactory.java:166)
>  ~[wicket-spring-8.1.0.jar:8.1.0] at 
> org.apache.wicket.injection.Injector.inject(Injector.java:111) 
> ~[wicket-ioc-8.1.0.jar:8.1.0]
> {code}
> The workaround for that issue is to use Objenesis.
> But now another error occurs as soon as the spring-bean is used in a 
> listener, e.g. in an onClick method of an AjaxLink.
> {code:java}
> Exception in thread "Wicket-AsyncPageStore-PageSavingThread" 
> java.lang.NoSuchMethodError: 
> de.korten.wicket.examples.helloworld.FooBarService.writeReplace()Ljava/lang/Object;
>  at 
> de.korten.wicket.examples.helloworld.Wicket_Proxy_FooBarService$$EnhancerByCGLIB$$5b8fb826.writeReplace(<generated>)
>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>  at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:498)
>  at java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1118)
>  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1136)
>  at 
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
>  at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
>  at 
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
>  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
>  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
>  at 
> org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:368)
>  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
>  at 
> org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:82)
>  at 
> org.apache.wicket.pageStore.AbstractPageStore.serializePage(AbstractPageStore.java:133)
>  at 
> org.apache.wicket.pageStore.DefaultPageStore.createSerializedPage(DefaultPageStore.java:281)
>  at 
> org.apache.wicket.pageStore.DefaultPageStore.storePage(DefaultPageStore.java:61)
>  at 
> org.apache.wicket.pageStore.AsynchronousPageStore$PageSavingRunnable.run(AsynchronousPageStore.java:225)
>  at java.lang.Thread.run(Thread.java:748)
> {code}
> The Spring-Bean itself can be resolved in the onClick, but not its 
> dependencies, these are then null.
> I have attached a simple example project to reproduce the problem.
> The attached application can be started with the command "gradlew bootrun". 
> After that the HomePage can be reached under localhost:8080. This page 
> contains a single link in whose onClick method the described Spring-Bean is 
> used. When you click on this link, a NullpointerException flies. This depends 
> on the point that the dependencies of the bean can no longer be resolved and 
> are therefore null.



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

Reply via email to