You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Thomas Krammer (JIRA)" <xe...@xml.apache.org> on 2010/09/08 14:46:33 UTC

[jira] Created: (XERCESJ-1465) Entity references not correctly resolved when DTD is cached

Entity references not correctly resolved when DTD is cached
-----------------------------------------------------------

                 Key: XERCESJ-1465
                 URL: https://issues.apache.org/jira/browse/XERCESJ-1465
             Project: Xerces2-J
          Issue Type: Bug
          Components: XNI
    Affects Versions: 2.10.0
         Environment: java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01-279, mixed mode)

            Reporter: Thomas Krammer


When using a XMLGrammarCachingConfiguration to cache the parsed DTD entity references are no longer correctly resolved.

The following example:

import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.io.StringReader;

public class XercesCachingTest
{
    public static final String XHTML_1_0_DOCTYPE = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
        "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";

    public static void main(String[] args) throws Exception
    {
        System.setProperty("org.apache.xerces.xni.parser.XMLParserConfiguration",
            "org.apache.xerces.parsers.XMLGrammarCachingConfiguration");

        final SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);

        final SAXParser parser = factory.newSAXParser();

        for(int i=0 ; i< 3 ; i++) {
            parse(parser);
        }
    }

    private static void parse(SAXParser parser)
        throws SAXException, IOException
    {
        final XMLReader reader = parser.getXMLReader();

        reader.setEntityResolver(new EntityResolver()
        {
            @Override
            public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
            {
                return new InputSource(new StringReader("<!ENTITY nbsp   \"&#160;\">"));
            }
        });
        reader.setContentHandler(new DefaultHandler()
        {
            @Override
            public void characters(char[] ch, int start, int length) throws SAXException
            {
                System.out.print(new String(ch, start, length));
            }
        });

        reader.parse(new InputSource(new StringReader(XHTML_1_0_DOCTYPE+"<html><body>Hello&nbsp;world</body></html>")));

        System.out.println("");

        parser.reset();
    }
}

prints "Hello world" for the first parser invocation, "Helloworld" for all following invocations.

When I remove the System.setProperty(...) line everything works correctly.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Resolved: (XERCESJ-1465) Entity references not correctly resolved when DTD is cached

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
     [ https://issues.apache.org/jira/browse/XERCESJ-1465?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michael Glavassevich resolved XERCESJ-1465.
-------------------------------------------

    Resolution: Duplicate

Duplicate of XERCESJ-1205.

> Entity references not correctly resolved when DTD is cached
> -----------------------------------------------------------
>
>                 Key: XERCESJ-1465
>                 URL: https://issues.apache.org/jira/browse/XERCESJ-1465
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: XNI
>    Affects Versions: 2.10.0
>         Environment: java version "1.6.0_20"
> Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065)
> Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01-279, mixed mode)
>            Reporter: Thomas Krammer
>
> When using a XMLGrammarCachingConfiguration to cache the parsed DTD entity references are no longer correctly resolved.
> The following example:
> import org.xml.sax.EntityResolver;
> import org.xml.sax.InputSource;
> import org.xml.sax.SAXException;
> import org.xml.sax.XMLReader;
> import org.xml.sax.helpers.DefaultHandler;
> import javax.xml.parsers.SAXParser;
> import javax.xml.parsers.SAXParserFactory;
> import java.io.IOException;
> import java.io.StringReader;
> public class XercesCachingTest
> {
>     public static final String XHTML_1_0_DOCTYPE = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
>         "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
>     public static void main(String[] args) throws Exception
>     {
>         System.setProperty("org.apache.xerces.xni.parser.XMLParserConfiguration",
>             "org.apache.xerces.parsers.XMLGrammarCachingConfiguration");
>         final SAXParserFactory factory = SAXParserFactory.newInstance();
>         factory.setNamespaceAware(true);
>         final SAXParser parser = factory.newSAXParser();
>         for(int i=0 ; i< 3 ; i++) {
>             parse(parser);
>         }
>     }
>     private static void parse(SAXParser parser)
>         throws SAXException, IOException
>     {
>         final XMLReader reader = parser.getXMLReader();
>         reader.setEntityResolver(new EntityResolver()
>         {
>             @Override
>             public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
>             {
>                 return new InputSource(new StringReader("<!ENTITY nbsp   \"&#160;\">"));
>             }
>         });
>         reader.setContentHandler(new DefaultHandler()
>         {
>             @Override
>             public void characters(char[] ch, int start, int length) throws SAXException
>             {
>                 System.out.print(new String(ch, start, length));
>             }
>         });
>         reader.parse(new InputSource(new StringReader(XHTML_1_0_DOCTYPE+"<html><body>Hello&nbsp;world</body></html>")));
>         System.out.println("");
>         parser.reset();
>     }
> }
> prints "Hello world" for the first parser invocation, "Helloworld" for all following invocations.
> When I remove the System.setProperty(...) line everything works correctly.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org