При использовании страницы ошибок Facelets 404 Websphere создает исключение FileNotFoundException вместо отправки на страницу ошибок 404
Я пытаюсь определить страницу Facelets как пользовательскую страницу ошибки 404 в моем файле web.xml следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
...
<welcome-file-list>
<welcome-file>/index.xhtml</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/pageNotFound.xhtml</location>
</error-page>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
...
</web-app>
Server.xml
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>jsp-2.2</feature>
<feature>ejbLite-3.1</feature>
<feature>jpa-2.0</feature>
<feature>jsf-2.0</feature>
<feature>cdi-1.0</feature>
<feature>localConnector-1.0</feature>
<feature>jaxws-2.2</feature>
<feature>jaxrs-1.1</feature>
</featureManager>
<httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
<applicationMonitor updateTrigger="mbean"/>
...
</server>
Теперь, если я развернусь в профиле Websphere liberty 8.5.5.4 и зайду, например, в [app_root]/abc, я не увижу свою страницу ошибок. Вместо этого я вижу страницу ошибки сервера по умолчанию:
Error Message: java.io.FileNotFoundException: SRVE0190E: File not found: /abc
Error Code: 404
Target Servlet: com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor
Error Stack:
java.io.FileNotFoundException: SRVE0190E: File not found: /abc
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:528)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1101)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4797)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:297)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:938)
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:745)
Это работало в моем предыдущем проекте, где мы использовали сервер WildFly 8.2.0.final. Когда я пробую это с JSP вместо страницы Facelets, тогда это работает.
Можно ли использовать страницу Facelets в качестве пользовательской страницы ошибок в профиле свободы Websphere 8.5.5.4? Нужно ли больше конфигурации на Websphere? Или я просто что-то здесь упускаю?