On 8/9/2013 1:51 PM, Alan Bateman wrote:
On 08/08/2013 22:57, huizhe wang wrote:
Hi,

The root cause of this issue is that SPECJVM2008 uses a 3rd party parser XOM 1.1 to convert the output to its canonical form. The XOM parser directly references to the JDK parser implementation "SAXParser" with a different configuration than the default JDK parser, in this case, the DTD-only parser configuration "DTDConfiguration". In JAXP 1.5, we added XMLSecurityPropertyManager that is instantiated in the default configuration "XML11Configuration". Since XMLSecurityPropertyManager is not supported by DTDConfiguration, XOM no longer works.
I see this has been pushed but just so I understand, but can you expand on what you mean by "directly references JDK parser implementation"? I'm just wondering whether it's using the standard provider interfaces when on the class path or whether it's tied to an old Xerces interface?

It's not using a standard interface. It goes straight to the implementation, here's how it's done:
    class JDK15XML1_0Parser extends SAXParser {

        JDK15XML1_0Parser() throws org.xml.sax.SAXException {

            super(new DTDConfiguration());
            // workaround for Java 1.5 beta 2 bugs
com.sun.org.apache.xerces.internal.util.SecurityManager manager =
new com.sun.org.apache.xerces.internal.util.SecurityManager(); setProperty(Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY, manager);

        }
    }

where:
SAXParser is com.sun.org.apache.xerces.internal.parsers.SAXParser
DTDConfiguration is com.sun.org.apache.xerces.internal.parsers.DTDConfiguration

And of course, if Xerces jars are on the classpath, these would be:
org.apache.xerces.parsers.SAXParser and org.apache.xerces.parsers.DTDConfiguration.

It looks up Xerces, then JDK, if failed, it actually falls back to the SAX interface, that is XMLReaderFactory.

-Joe


-Alan.

Reply via email to