I believe you are experiencing a ServiceLoader in your xerces jar file.
 You can test this by looking for the file
/META-INF/services/javax.xml.parsers.SAXParserFactory.  If it exists, you
have a few choices....

Brute force...remove the file from the xerces jar and repackage (relies on
classpath and a one-off jar...not a good solution).

You can manipulate the load of the "service" implementation by iterating
over the options...

        ServiceLoader<SAXParserFactory> serviceLoader = ServiceLoader.load(
SAXParserFactory.class);
        serviceLoader.iterator();
        for (SAXParserFactory spf : serviceLoader) {
              // spf.???
        }

Directly load the impl you want ...
SAXParserFactory.html#newInstance(java.lang.String,
java.lang.ClassLoader)<http://docs.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance(java.lang.String,
java.lang.ClassLoader)>

I'd advise reading the javadoc for both forms of newInstance


Hope this helps



On Thu, Nov 24, 2011 at 5:05 AM, Alex Geller <a...@4js.com> wrote:

> 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