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