Note that the linked second form of newInstance(...) seems to bo 1.6 specific
On Fri, Nov 25, 2011 at 3:06 AM, jonathan wood <jonathanshaww...@gmail.com>wrote: > > 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,%20java.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 >> >> >