2015-02-05 1 views
2

Наше приложение JSF отлично работает при развертывании в tomcat, но мы получаем эту ошибку, когда получаем доступ к первой странице в пользовательском интерфейсе. После этого ошибка не видна на других страницах.org.xml.sax.SAXException: Обработка ошибок [jar: файл: {app} /WEB-INF/lib/jsf-impl-2.2.9.jar!/META-INF/[email protected],31 ]

Это JSF зависимости мы используем:

<dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.9</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.9</version> 
      <type>jar</type> 
     </dependency> 

Это ошибка трассировки стека:

SEVERE: Error Loading Library: jar:file:../.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/{app}/WEB-INF/lib/jsf-impl-2.2.9.jar!/META-INF/mojarra_ext.taglib.xml 
java.io.IOException: Error parsing [jar:file:../.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/{app}/WEB-INF/lib/jsf-impl-2.2.9.jar!/META-INF/mojarra_ext.taglib.xml]: 
    at com.sun.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:410) 
    at com.sun.facelets.compiler.TagLibraryConfig.loadImplicit(TagLibraryConfig.java:431) 
    at com.sun.facelets.compiler.Compiler.initialize(Compiler.java:87) 
    at com.sun.facelets.compiler.Compiler.compile(Compiler.java:104) 
    at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:197) 
    at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:144) 
    at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:95) 
    at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:517) 
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(Unknown Source) 
    at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(Unknown Source) 
    at javax.faces.webapp.FacesServlet.service(Unknown Source) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.bphx.cool.jsf.CustomHeaderFilter.doFilter(CustomHeaderFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:611) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    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:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: org.xml.sax.SAXException: Error Handling [jar:file:../.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/{app}/WEB-INF/lib/jsf-impl-2.2.9.jar!/META-INF/[email protected],31] 
    at com.sun.facelets.compiler.TagLibraryConfig$LibraryHandler.error(TagLibraryConfig.java:376) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:137) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1599) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1877) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:742) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1370) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1290) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3130) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:333) 
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:195) 
    at com.sun.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:407) 
    ... 31 more 

Что я могу сделать, чтобы предотвратить этот журнал ошибок?

ответ

3

Вызванный: org.xml.sax.SAXException: Обработка ошибок [баночка: файл. ../ метаданные/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/{приложение} /WEB-INF/lib/jsf-impl-2.2.9.jar!/META-INF/[email protected],31]

ошибка проявилась в строке 47, символ 31 из /META-INF/mojarra_ext.taglib.xml файл в файле jsf-impl-2.2.9.jar. Если открыть файл JAR с ZIP инструментом и изучить этот файл TagLib вокруг линии 47, то вы увидите:

44 <facelet-taglib xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
45     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
46     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd" 
47     version="2.2"> 
48  <namespace>http://mojarra.dev.java.net/mojarra_ext</namespace> 
49  <tag> 

Это линия с version="2.2". Это предполагает конфликт версий. Для начала, вам необходимо убедиться, что /WEB-INF/faces-config.xml файл вашего веб-приложение правильно объявлен в JSF 2.2 и не старше:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" 
    version="2.2"> 
    <!-- Config here --> 
</faces-config> 

И вы также должны убедиться, что веб-приложение-х /WEB-INF/lib не содержит Facelets 1 .x файлы JAR. Пакет com.sun.facelets.* в трассировке стека предполагает наличие Facelets 1.x в пуле классов выполнения, что неверно при использовании JSF 2.x, поскольку он уже поставляется с Facelets 2.x в комплекте, который находится в пакете com.sun.faces.facelets.*.

2

При всем моем уважении я не думаю, что выбранный ответ действительно решает эту проблему. По крайней мере, это не решило его для меня.

Класс, который выбрасывает это исключение (com.sun.facelets.compiler.TagLibraryConfig$LibraryHandler), исходит из автономной реализации Facelet. Если вы отлаживаете эту проблему, вы увидите, что основной причиной этой ошибки является то, что корневой элемент XML не соответствовал DTD (hint: XMLDTDValidator.rootElementSpecified).

Учитывая, что TagLibraryConfig существует только в автономных Facelets, у вас, вероятно, была такая же проблема, как и у меня. Происходит то, что когда TagLibraryConfig старого Facelet просматривает путь к классам для всех библиотек тегов facelet под META-INF/**/*.taglib.xml, он выбирает META-INF/mojarra_ext.taglib.xml Mojarra, который не полностью совместим со старым DTD (например, атрибут версии не существовал тогда). Он регистрирует сбой и счастливо продолжается.

Лучший способ избежать этой ошибки - начать использовать Facelets в JSF 2.x.

Однако, если вы застряли с Facelets 1.x (например, потому что используете RichFaces 3.x), и вам интересно, как игнорировать это исключение, вы должны знать, что вся эта библиотека тегов обеспечивает три Mojarra специфические теги:

  • regexValidator дублирующий f:validateRegex доступны, начиная с JSF 2.0
  • creditcardValidator выполняет элементарную проверку кредитной карты формата номер и Лун проверить
  • focus оказывает небольшой скрипт, который устанавливает фокус на произвольный элемент.

Если вам не нужны эти теги, вполне можно проигнорировать эту ошибку. Я рассмотрел несколько способов удалить его из журналов, но каждое решение (отключая регистратор, пользовательский загрузчик классов или пользовательский FaceletViewHandler) либо имело недостатки, либо казалось излишним для такой несущественной проблемы.