I looked at the org.apache.xml.serialize classes for the first
time today and I can't seem to get a simple XMLSerializer
example to work. I keep getting NullPointerExceptions all over
the place. 

Has anyone else seen these problems? Is it a usage problem?
Perhaps we should have part of the documentation talk about 
how to use the new serializer APIs. Anybody interested in
writing those docs?

Also, I think I saw some bugs in the code. But I'd like to
get an answer on whether I'm using them correctly before I
start fixing bugs in the source.

I've included the program below as well as the stack trace of
the exception.

// BEGIN Test.java
package test;

import org.apache.xerces.parsers.DOMParser;

import org.apache.xml.serialize.Method;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.SerializerFactory;
import org.apache.xml.serialize.XMLSerializer;

import org.w3c.dom.Document;

public class Test {

    public static void main(String argv[]) throws Exception {

        DOMParser parser = new DOMParser();
        SerializerFactory factory = 
SerializerFactory.getSerializerFactory(Method.XML);

        for (int i = 0; i < argv.length; i++) {
            final String arg = argv[i];
            System.err.println("argv["+i+"]: "+arg);
            parser.parse(arg);
            Document document = parser.getDocument();
            OutputFormat format = new OutputFormat(document, "UTF-8", false);
            Serializer serializer = factory.makeSerializer(format);
            serializer.asDOMSerializer().serialize(document);
        }

    }

}
// END Test.java

// BEGIN personal.xml
<?xml version="1.0"?>
<!DOCTYPE personnel SYSTEM "personal.dtd">
<?xml-stylesheet type='text/xsl' href='personal.xsl'?>
<personnel>
  <person id="H.MARUYAMA" >
    <name><family>MARUYAMA</family> <given>Hiroshi</given></name>
    <email>[EMAIL PROTECTED]</email>
    <link subordinates="  N.URAMOTO    K.TAMURA "/>
  </person>
  <person id="N.URAMOTO">
    <name><family>URAMOTO</family> <given>Naohiko</given></name>
    <email>[EMAIL PROTECTED]</email>
    <link manager="             H.MARUYAMA"/>
  </person>
  <person id="K.TAMURA">
    <name>
      <family>TAMURA</family> <given>Kent</given>
    </name>
    <!-- This URL is mail address.-->
    <url href="mailto:[EMAIL PROTECTED]"/>
    <url href="mailto:[EMAIL PROTECTED]"/>
    <link manager="H.MARUYAMA"/>
  </person>
</personnel>
// END personal.xml

// BEGIN personal.dtd
<?xml encoding="US-ASCII"?>

<!ELEMENT personnel (person)+>
<!ATTLIST person note CDATA #IMPLIED
                 contr (true|false) "false"
                 id ID #REQUIRED>
<!ELEMENT person (name,email*,url*,link?)>
<!ELEMENT family (#PCDATA)>
<!ELEMENT given (#PCDATA)>
<!ELEMENT name (family,given?)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT url EMPTY>
<!ATTLIST url href CDATA "http://";>
<!ELEMENT link EMPTY>
<!ATTLIST link
  manager IDREF #IMPLIED
  subordinates IDREFS #IMPLIED>

<!NOTATION gif SYSTEM "photoshop.exe">

<!ENTITY internal-entity "entity-value">
<!ENTITY external-entity PUBLIC "-//ENTITY" "external-entity.ent">
<!ENTITY unparsed-entity SYSTEM "unparsed-entity.ent" NDATA gif>
// END personal.dtd

// BEGIN Stack Trace
Exception in thread "main" java.lang.NullPointerException:
        at 
org.apache.xml.serialize.BaseMarkupSerializer.printDoctypeURL(BaseMarkupSerializer.java:1261)
        at 
org.apache.xml.serialize.BaseMarkupSerializer.unparsedEntityDecl(BaseMarkupSerializer.java:638)
        at 
org.apache.xml.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:773)
        at 
org.apache.xml.serialize.BaseMarkupSerializer.serialize(BaseMarkupSerializer.java:385)
        at test.Test.main(Test.java:27)
// END Stack Trace

-- 
Andy Clark * IBM, JTC - Silicon Valley * [EMAIL PROTECTED]

Reply via email to