[ 
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)

Reply via email to