Развертывание OmniFaces 3.1 на Tomcat 8 без BV создает java.lang.NoClassDefFoundError: javax / validation / ConstraintViolation - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь установить OmniFaces 3.1 впервые.После добавления зависимости в мой pom-файл при запуске сервера Tomcat возникает ошибка NoClassDefFoundError.Я еще не сделал никаких других изменений (web.xml, Face-config.xml) конфигурации;добавлена ​​только зависимость.

Видимо, исключение возникает из-за зависимостей JSR303, возникающих при обработке аннотаций класса Omnifaces.Тем не мение;на странице демонстрации OmniFaces я читаю:

Все версии OmniFaces имеют необязательную зависимость от проверки bean-компонента JSR303, которая требуется только тогда, когда вы фактически начинаете использовать o: validateBean или JsfLabelMessageInterpolator.

необязательно , являющееся ключевым словом.

Вот трассировка стека:

java.lang.NoClassDefFoundError: javax/validation/ConstraintViolation
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.getDeclaredMethods(Class.java:1975)
    at com.sun.faces.util.Util.classHasAnnotations(Util.java:1145)
    at com.sun.faces.application.ApplicationInstanceFactoryMetadataMap.onPut(ApplicationInstanceFactoryMetadataMap.java:76)
    at com.sun.faces.application.ApplicationInstanceFactoryMetadataMap.onPut(ApplicationInstanceFactoryMetadataMap.java:43)
    at com.sun.faces.util.MetadataWrapperMap.put(MetadataWrapperMap.java:99)
    at com.sun.faces.config.processor.AbstractConfigProcessor.loadClass(AbstractConfigProcessor.java:425)
    at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.processHandlerClass(FaceletTaglibConfigProcessor.java:446)
    at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.processTags(FaceletTaglibConfigProcessor.java:393)
    at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.processTagLibrary(FaceletTaglibConfigProcessor.java:327)
    at com.sun.faces.config.processor.FaceletTaglibConfigProcessor.process(FaceletTaglibConfigProcessor.java:271)
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:445)
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:237)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4577)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5041)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:682)
    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 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)
Caused by: java.lang.ClassNotFoundException: javax.validation.ConstraintViolation
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
    ... 44 more

1 Ответ

0 голосов
/ 04 июня 2018

Это работало в 2.x, но действительно сломалось, как описано с 3.0.

Проблема с корнем заключается в том, что начиная с JSF 2.3, обработчики тегов в JSF 2.3-совместимых библиотеках также сканируются на наличие аннотаций во время запуска веб-приложения.Это неявно загрузит класс taghandler за <o:validateBean>, даже если он не используется где-либо в веб-приложении.

В соответствии с выпуском 467 исправлено его для 3.2-SNAPSHOT:рефакторинг действия проверки бина в статический контекст, чтобы он не загружался при загрузке класса taghandler.

...