[
https://issues.apache.org/jira/browse/MYFACES-4002?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14718339#comment-14718339
]
Dennis Kieselhorst commented on MYFACES-4002:
---------------------------------------------
As far as I can see there were no significant changes in WebXmlParser. I tried
it with latest 2.0.x release and the same error occurred. So I think it's more
a change of dependencies (e.g. XML parser) or environment (servlet container).
I also tried your example with Jetty and Jetty itself was not even able to
parse the file:
{noformat}
java.io.FileNotFoundException
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at
sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at
sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:619)
at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1297)
at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1234)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1908)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3067)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
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:648)
at
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:332)
at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:252)
{noformat}
So a hack in MyFaces would just fix a particular setup but not the whole issue.
As I'm also not aware of possible side effects I will not apply your patch but
leaving this issue open for a while to allow comments from other team members.
> Regression? - References to external entities not working with WebXmlParser
> ---------------------------------------------------------------------------
>
> Key: MYFACES-4002
> URL: https://issues.apache.org/jira/browse/MYFACES-4002
> Project: MyFaces Core
> Issue Type: Bug
> Affects Versions: 2.2.4
> Environment: Myfaces 2.2.4, Tomcat 8.0.23, JDK 1.8_20, Windows 7 64bit
> Reporter: Thomas Timbul
> Attachments: patch1.txt
>
>
> 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:
> {code:xml}
> <!ENTITY contextparams SYSTEM "webxml/context-params.xml">
> {code}
> (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:
> {code}
> 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
> {code}
> The solution is to remove the file:// prefix before passing to the external
> context to resolve, as in this patch:
> {code}
> 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)
> {
> {code}
> 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.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)