Как внедрить bean-компонент RequestScope в приложение калитки весенней загрузки - PullRequest
0 голосов
/ 05 марта 2019

На моей странице Wicket у меня есть:

@SpringBean
protected J2EContext j2EContext;

В конфигурации у меня есть:

@Bean
@RequestScope
public J2EContext getWebContext() {
    return new J2EContext(request, response, getSessionStore());
}


@Bean
public RequestContextListener requestContextListener() {
    return new RequestContextListener();
}

приложение запускается нормально, но когда я захожу на домашнюю страницу, я получаю исключение:

Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
    at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
    at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:

329)
    at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
    at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

когда калитка хочет ввести J2EContext боб.Я думаю, это потому, что страница рендерится до @RequestScope создания этого компонента.Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 05 марта 2019

для внедрения bean-компонентов Wicket создает прокси двумя различными способами:

  • Если bean-интерфейс является интерфейсом, создается стандартный java.lang.reflect.Proxy
  • Если bean-компонент являетсякласс cglib используется по умолчанию

К сожалению, cglib не может создать прокси для классов без конструктора по умолчанию.Однако существует третий способ решения проблемы.Просто добавьте objenesis в качестве зависимости к вашему проекту, и Wicket будет использовать его вместо cglib.

...