Lukas Korten created WICKET-6607:
------------------------------------
Summary: Spring Beans with constructor injection used 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
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. 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.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)