Как исправить javax.xml.xpath.XPathFactoryConfigurationException с Omnifaces 1.14.1

У нас есть веб-приложение JSF 2.0, работающее на WAS 8.5, в котором мы используем Omnifaces FullAjaxExceptionHandlerFactory. В остальном приложении ничего другого от Omnifaces не используется. Пользовательский интерфейс основан на фреймворке Primefaces.

Приложение запускается правильно, но при некоторых действиях (Изменить вкладку в приложении, нажать кнопку) возникает следующее исключение:

000000d2 ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: An exception was thrown by one of the service methods of the servlet [FacesServlet] in application [<anonymized>]. Exception created : [java.lang.UnsupportedOperationException: java.lang.RuntimeException: javax.xml.xpath.XPathFactoryConfigurationException: Provider javax.xml.xpath.XPathFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: wsjar:file:/<anonymized>/lib/Saxon-HE-9.5.1-1.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2: Illegal configuration-file syntax
    at org.omnifaces.config.WebXml.init(WebXml.java:186)
    at org.omnifaces.config.WebXml.init(WebXml.java:162)
    at org.omnifaces.config.WebXml.checkInitialized(WebXml.java:388)
    at org.omnifaces.config.WebXml.findErrorPageLocation(WebXml.java:208)
    at org.omnifaces.exceptionhandler.FullAjaxExceptionHandler.findErrorPageLocation(FullAjaxExceptionHandler.java:418)
    at org.omnifaces.exceptionhandler.FullAjaxExceptionHandler.handleAjaxException(FullAjaxExceptionHandler.java:350)
    at org.omnifaces.exceptionhandler.FullAjaxExceptionHandler.handle(FullAjaxExceptionHandler.java:322)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:509)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1238)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:79)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:967)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107)
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1404)
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:196)
    at com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:3490)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleException(WebApp.java:4077)
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:89)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:949)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:213)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)
Caused by: java.lang.RuntimeException: javax.xml.xpath.XPathFactoryConfigurationException: Provider javax.xml.xpath.XPathFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: wsjar:file:/<anonymized>/lib/Saxon-HE-9.5.1-1.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2: Illegal configuration-file syntax
    at javax.xml.xpath.XPathFactory.newInstance(Unknown Source)
    at org.omnifaces.config.WebXml.init(WebXml.java:175)
    ... 39 more

Если я закомментирую зависимость в pom.xml и фабрику в Faces-config.xml. Приложение работает нормально.

Вот запись вfaces-config.xml

<factory>
    <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
  </factory>

Есть идеи, откуда несовместимость?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
544
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Is there any idea, from where the incompatibility comes from?

Несовместимость возникает из-за зависимости в вашем проекте:

<dependency>
    <groupId>net.sf.saxon</groupId>
    <artifactId>Saxon-HE</artifactId>
    <version>9.5.1-1</version>
</dependency>

Saxon-HE-9.5.1-1.jar содержит службу /META-INF/services/javax.xml.xpath.XPathFactory, которая содержит строки, в которых недопустимо наличие пробелов:

net.sf.saxon.xpath.XPathFactoryImpl
http\://java.sun.com/jaxp/xpath/dom:    net.sf.saxon.xpath.XPathFactoryImpl
http\://saxon.sf.net/jaxp/xpath/om:     net.sf.saxon.xpath.XPathFactoryImpl

Это не работает в методе javax.xml.xpath.ServiceLoader.parseLine:

....
if ((ln.indexOf(' ') >= 0) || (ln.indexOf('\t') >= 0))
                fail(service, u, lc, "Illegal configuration-file syntax");
....

Попробуйте обновить свою версию Saxon-HE как 9.5.1-1 довольно старая (2013 г.) и, похоже, она просто не совместима с Java 8+.

Версия 9.5.1-5 — это первая версия с исправленной ошибкой.

The following bugs are cleared in 9.5.1.5, issued 2014-03-25
...
1944 Illegal configuration-file syntax in META-INF/services/javax.xml.xpath.XPathFactory

Выпуск 1944 г.

Другие вопросы по теме