java.lang.ClassNotFoundException: com.sun.facelets.tag.jsf.ComponentHandler после обновления с MyFaces 1.1 до MyFaces 2.2

Я пытаюсь перенести веб-приложение с MyFaces 1.1 на 2.2.

В основном я следовал первым шагам в разделе Basic Changes из https://stackoverflow.com/a/4532870/5467214 для обновления с JSF 1.1 до JSF 2.2:

  • обновить web.xml
  • обновить faces-config.xml
  • заменить старые myfaces jar на jar версии 2.2

На данный момент я намерен сохранить JSP и заменить их на Facelets после того, как первые, предположительно «безболезненные» шаги просто обновления JSF будут успешными.

Веб-приложение работало со старой версией JSF, но после выполнения описанных выше шагов я получаю следующую ошибку и трассировку стека:

java.lang.NoClassDefFoundError: com/sun/facelets/tag/jsf/ComponentHandler
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.myfaces.shared.util.ClassUtils.classForName(ClassUtils.java:187)
    at org.apache.myfaces.view.facelets.util.ReflectionUtil.forName(ReflectionUtil.java:66)
    at org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.createClass(TagLibraryConfig.java:539)
    at org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:466)
    at org.apache.myfaces.view.facelets.compiler.FaceletsCompilerSupport.loadLibraries(FaceletsCompilerSupport.java:157)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.loadLibraries(FaceletViewDeclarationLanguage.java:2526)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.createCompiler(FaceletViewDeclarationLanguage.java:2172)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.initialize(FaceletViewDeclarationLanguage.java:2464)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.<init>(FaceletViewDeclarationLanguage.java:309)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguageStrategy.<init>(FaceletViewDeclarationLanguageStrategy.java:52)
    at org.apache.myfaces.view.ViewDeclarationLanguageFactoryImpl.initialize(ViewDeclarationLanguageFactoryImpl.java:104)
    at org.apache.myfaces.view.ViewDeclarationLanguageFactoryImpl.getViewDeclarationLanguage(ViewDeclarationLanguageFactoryImpl.java:73)
    at org.apache.myfaces.application.ViewHandlerImpl.getViewDeclarationLanguage(ViewHandlerImpl.java:183)
    at org.apache.myfaces.application.ViewHandlerImpl.createView(ViewHandlerImpl.java:255)
    at org.jenia.faces.template.handler.ViewHandler.createView(ViewHandler.java:251)
    at javax.faces.application.ViewHandlerWrapper.createView(ViewHandlerWrapper.java:100)
    at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.createView(ResourceViewHandlerWrapper.java:70)
    at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:289)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:489)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:467)
    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:412)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:201)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.sun.facelets.tag.jsf.ComponentHandler
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    ... 54 more

java.lang.NullPointerException
    at net.sf.jsfcomp.chartcreator.ChartListener.afterPhase(ChartListener.java:42)
    at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:117)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:211)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:489)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:467)
    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:412)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:201)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Мы используем Tomcat7 в качестве контейнера сервлетов, IntelliJ Community Edition в качестве IDE и Maven в качестве менеджера сборки и для управления зависимостями.

Поскольку «Томагавк» появляется в трассировке стека, я заменил tomahawk-1.1.9.jar на tomahawk21-1.1.14.jar в своем /WEB-INF/lib в соответствии с Какие jar-файлы мне нужны, чтобы избежать NoClassDefFoundError: com/sun/facelets/tag/jsf/ComponentHandler?. К сожалению, это не решило проблему.

Я также не смог найти версию томагавка специально для JSF 2.2 ни в репозитории maven, ни где-либо еще.

Нужно ли использовать томагавк с MyFaces 2.2?

Или ошибка связана с чем-то другим?


person scholt    schedule 12.04.2017    source источник
comment
Вы уверены, что tomahawk-1.x еще не где-то там? И проверьте это: at org.jenia.faces.template.handler.ViewHandler.createView(ViewHandler.java:251)... Женя??? А net.sf.jsfcomp.chartcreator.?   -  person Kukeltje    schedule 12.04.2017
comment
@Kukeltje Спасибо за ваш ответ. Да, я только что убедился, что в каталоге /WEB-INF/lib нет другой библиотеки томагавков, кроме tomahawk21-1.1.14.jar. Я не знаю, что это за jenia taglib — радости наследования древнего кода с задачей его обновить — но когда я его удаляю, я получаю сообщение об ошибке при попытке развернуть веб-приложение на контейнере сервлетов Tomcat.   -  person scholt    schedule 12.04.2017
comment
Динамическая библиотека Jenia, которую мы, по-видимому, используем, взята с сайта jenia.org, и только два тега, которые мы используем, этой библиотекой являются jp:popupFrame и jp:closePopupFrame. Судя по sourceforge.net/p/jenia4faces/bugs/48, думаю, там не является версией библиотеки, совместимой с JSF2. Поэтому я попытаюсь удалить все случаи использования этих тегов, удалить taglib и посмотреть, работает ли он. Спасибо за указание на это!   -  person scholt    schedule 12.04.2017
comment
@Kukeltje Библиотека jenia действительно была виновником! После удаления ошибка исчезла. Еще раз спасибо, что указали на это!   -  person scholt    schedule 12.04.2017
comment
Так легко найти, если вы прочитаете трассировку стека ... Это сэкономило бы вам много времени, задавая вопрос, и нам время тоже !!! Пожалуйста, учитесь на этом!   -  person Kukeltje    schedule 12.04.2017


Ответы (1)


Из трассировки стека я подозреваю, что другая библиотека JSF 1.x вызывает это:

at org.jenia.faces.template.handler.ViewHandler.createView(ViewHandler.java:251)

Поэтому проверьте, что такое библиотека «jenia», и получите более новую версию, совместимую с jsf 2, или удалите ее.

person Kukeltje    schedule 12.04.2017