xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jonathan wood <jonathanshaww...@gmail.com>
Subject Re: org.xml.sax.SAXParseException: Invalid encoding name "HP-ROMAN8"
Date Fri, 25 Nov 2011 08:12:00 GMT
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
<jonathanshawwood@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 <ag@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-unsubscribe@xmlgraphics.apache.org
>> For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org
>>
>>
>

Mime
View raw message