myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Timbul (JIRA)" <>
Subject [jira] [Created] (MYFACES-4002) Regression? - References to external entities not working with WebXmlParser
Date Wed, 17 Jun 2015 14:51:01 GMT
Thomas Timbul created MYFACES-4002:

             Summary: Regression? - References to external entities not working with WebXmlParser
                 Key: MYFACES-4002
             Project: MyFaces Core
          Issue Type: Bug
    Affects Versions: 2.2.4
         Environment: Tomcat 8.0.23, JDK 1.8_20, Windows 7 64bit
            Reporter: Thomas Timbul

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/
---	(revision ???)
+++	(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)


This message was sent by Atlassian JIRA

View raw message