Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Not A Problem
-
2.2.4
-
None
-
None
-
None
-
Myfaces 2.2.4, Tomcat 8.0.23, JDK 1.8_20, Windows 7 64bit
Description
I've searched JIRA and there are a few issues related to WebXmlParser, but this seems almost like a recurrence of MYFACES-1754.
My web.xml is split into multiple files, each declared as an XML entity relative to the web.xml file itself:
<!ENTITY contextparams SYSTEM "webxml/context-params.xml">
(As a side note I used to use jndi:/localhost/WEB-INF/webxml/context-params.xml, but for some reason Tomcat 8 claims that jndi is an invalid protocol).
Using resource relative system identifiers Tomcat is now happy and the context starts correctly. However, during its initialization MyFaces re-parses the web.xml descriptor and resolves the entities incorrectly, leading to failure with the message:
2015-06-17 15:48:13.853 [localhost-startStop-1] ERROR o.a.m.s.w.webxml.WebXmlParser - Unable to parse web.xml
java.lang.IllegalArgumentException: The resource path [file:///WEB-INF/webxml/context-params.xml] is not valid
The solution is to remove the file:// prefix before passing to the external context to resolve, as in this patch:
Index: org/apache/myfaces/shared_impl/webapp/webxml/WebXmlParser.java =================================================================== --- WebXmlParser.java (revision ???) +++ WebXmlParser.java (working copy) @@ -138,6 +138,9 @@ private InputSource createContextInputSource(String publicId, String systemId) { + if(systemId.startsWith("file:")) { + systemId = systemId.substring(7); // remove file:// + } InputStream inStream = _context.getResourceAsStream(systemId); if (inStream == null) {
Those three lines of code are based on other work by the MyFaces team (org.apache.myfaces.config.impl.FacesConfigEntityResolver) and even if it weren't is made available free of charge and free from license restrictions.
Attachments
Attachments
Issue Links
- relates to
-
MYFACES-1754 References to external entities not working with WebXmlParser
- Closed