Hi,
I am not sure if this is a Batik only issue but since I encountered it using
Batik I will share the problem and the solution I have found so far.

Description of the problem:
If you have a program that reads XML files and you add "xerces_2_5_0.jar" to
your CLASSPATH on a HP-UX machine (or any other machine that has proprietary
XML encodings) then the program may fail with the exception
"org.xml.sax.SAXParseException: Invalid encoding name "HP-ROMAN8"".

Note that the existence of this jar in the CLASSPATH is sufficient to make
this happen. The following test program illustrates the issue (forgive the
deprecation warning):

import org.xml.sax.InputSource;
import javax.xml.parsers.SAXParserFactory;
import java.io.StringBufferInputStream;
public class EncodingTest
{
    public static void main(String[] args) throws Exception
    {
       
SAXParserFactory.newInstance().newSAXParser().getXMLReader().parse(new
InputSource(new StringBufferInputStream("<?xml version=\"1.0\"
encoding=\"HP-ROMAN8\"?> ")));
    }
}

Consider the following invocations:
Example 1:
$(unset CLASSPATH;java -Djaxp.debug=1 EncodingTest)
JAXP: find factoryId =javax.xml.parsers.SAXParserFactory
JAXP: loaded from fallback value:
com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
JAXP: created new instance of class
com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl using
ClassLoader: null
$

Example 2:
$(export CLASSPATH=.:$BATIKDIR/batik-1.7/lib/xerces_2_5_0.jar;java
-Djaxp.debug=1 EncodingTest)
JAXP: find factoryId =javax.xml.parsers.SAXParserFactory
JAXP: found jar
resource=META-INF/services/javax.xml.parsers.SAXParserFactory using
ClassLoader: sun.misc.Launcher$AppClassLoader@df6ccd
JAXP: found in resource, value=org.apache.xerces.jaxp.SAXParserFactoryImpl
JAXP: created new instance of class
org.apache.xerces.jaxp.SAXParserFactoryImpl using ClassLoader:
sun.misc.Launcher$AppClassLoader@df6ccd
[Fatal Error] :1:43: Invalid encoding name "HP-ROMAN8".
Exception in thread "main" org.xml.sax.SAXParseException: Invalid encoding
name "HP-ROMAN8".
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at EncodingTest.main(EncodingTest.java:9)
$

Now, the issue can be fixed by forcing the JVM to use the default factory by
settings the property javax.xml.parsers.SAXParserFactory as described in
http://docs.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance()
as follows:

Example 3:

$(export CLASSPATH=.:$BATIKDIR/batik-1.7/lib/xerces_2_5_0.jar;java
-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
-Djaxp.debug=1 EncodingTest)
JAXP: find factoryId =javax.xml.parsers.SAXParserFactory
JAXP: found system property,
value=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
JAXP: created new instance of class
com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl using
ClassLoader: null
$

Questions:
1) Is it necessary to include xerces_2_5_0.jar in the CLASSPATH?
2) If yes, how can I load documents with local encodings and use Batik at
the same time.

Thanks,
Alex 

~   

--
View this message in context: 
http://batik.2283329.n4.nabble.com/org-xml-sax-SAXParseException-Invalid-encoding-name-HP-ROMAN8-tp4103307p4103307.html
Sent from the Batik - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-h...@xmlgraphics.apache.org

Reply via email to