users@jaxb.java.net

Encoding Problem With Marshaller?

From: Jason Weis <jweis_at_apelon.com>
Date: Wed, 20 Oct 2004 08:10:40 -0400

I am trying to marshall and unmarshall the Ó character which appears to have the hex value F3. The following code fragment throws an exception (listed below) after the second attempt to Unmarshall. To be clear, the first unmarshall works, but after calling marshall and writing to a String, unmarshalling that same string fails. Am I doing wrong or is something broken?

 

 

public static void main(String[] args) {

 

 

        try {

                //&#x00F3 = Ó

 

            String s = "<?xml version = \"1.0\" encoding = \"UTF-8\"?><classifierSpace namespace=\"Triad_Ext_Joe\" version=\"1.0.0.0\" refby=\"NAME\" xmlns=\"http://com.apelon.mc.types\">\n" +

                    " <concept>\n" +

                    " <gid>&#x00F3;</gid>\n" +

                    " <primitive>true</primitive>\n" +

                    " <kind>Procedure_kind</kind>\n" +

                    " <definedparent namespacelocale=\"SUBSCRIPTION\">\n" +

                    " <identifier>SPECIMEN_COLLECTION_PROCEDURE</identifier>\n" +

                    " </definedparent>\n" +

                    " </concept>\n" +

                    "</classifierSpace>";

 

            JAXBContext fJaxContext = JAXBContext.newInstance("com.apelon.modularclassifier.jaxb");

            ObjectFactory fObjectFactory = new ObjectFactory();

 

            Unmarshaller un = fObjectFactory.createUnmarshaller();

            Object o = un.unmarshal(new StringInputStream(s));

 

            Marshaller mar = fObjectFactory.createMarshaller();

 

            StringWriter sw = new StringWriter();

            mar.marshal(o,sw);

            o = un.unmarshal(new StringInputStream(sw.getBuffer().toString()) );

 

 

 

 

        } catch (Exception e) {

            e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.

        }

 

    }

 

 

DefaultValidationEventHandler: [FATAL_ERROR]: Character conversion error: "Malformed UTF-8 char -- is an XML encoding declaration missing?" (line number may be too low).

     Location:

org.xml.sax.SAXParseException: Character conversion error: "Malformed UTF-8 char -- is an XML encoding declaration missing?" (line number may be too low).

            at org.apache.crimson.parser.InputEntity.fatal(InputEntity.java:1100)

            at org.apache.crimson.parser.InputEntity.fillbuf(InputEntity.java:1072)

            at org.apache.crimson.parser.InputEntity.isXmlDeclOrTextDeclPrefix(InputEntity.java:914)

            at org.apache.crimson.parser.Parser2.maybeXmlDecl(Parser2.java:1048)

            at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:520)

            at org.apache.crimson.parser.Parser2.parse(Parser2.java:318)

            at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)

            at com.apelon.modularclassifier.jaxb.impl.runtime.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:142)

            at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:131)

            at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:178)

            at com.apelon.modularclassifier.junk.TestUnmarshall.main(TestUnmarshall.java:44)

--------------- linked to ------------------

javax.xml.bind.UnmarshalException: Character conversion error: "Malformed UTF-8 char -- is an XML encoding declaration missing?" (line number may be too low).

 - with linked exception:

[org.xml.sax.SAXParseException: Character conversion error: "Malformed UTF-8 char -- is an XML encoding declaration missing?" (line number may be too low).]

            at com.apelon.modularclassifier.jaxb.impl.runtime.SAXUnmarshallerHandlerImpl.handleEvent(SAXUnmarshallerHandlerImpl.java:551)

            at com.apelon.modularclassifier.jaxb.impl.runtime.ErrorHandlerAdaptor.propagateEvent(ErrorHandlerAdaptor.java:89)

            at com.apelon.modularclassifier.jaxb.impl.runtime.ErrorHandlerAdaptor.fatalError(ErrorHandlerAdaptor.java:65)

            at org.apache.crimson.parser.InputEntity.fatal(InputEntity.java:1106)

            at org.apache.crimson.parser.InputEntity.fillbuf(InputEntity.java:1072)

            at org.apache.crimson.parser.InputEntity.isXmlDeclOrTextDeclPrefix(InputEntity.java:914)

            at org.apache.crimson.parser.Parser2.maybeXmlDecl(Parser2.java:1048)

            at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:520)

            at org.apache.crimson.parser.Parser2.parse(Parser2.java:318)

            at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)

            at com.apelon.modularclassifier.jaxb.impl.runtime.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:142)

            at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:131)

            at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:178)

            at com.apelon.modularclassifier.junk.TestUnmarshall.main(TestUnmarshall.java:44)