This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

XML problems


Hey List

Here a long (very long) ago promised failing XML example (GCJ rev 121693). Reading XML works, printing (transforming) fails:

----- expected output start -----
reading xml:
<test>
        <line>Just a line of Text.</line>
</test>

writing xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
<foo>abc</foo>
</test>
----- expected output end -----

----- actual output start -----
reading xml:
<test>
	<line>Just a line of Text.</line>
</test>

writing xml:
Exception in thread "main" java.lang.NullPointerException
   at gnu.xml.dom.ls.SAXEventSink.startDocument(XmlTest-1.1)
   at XmlTest.writeXml(XmlTest-1.1)
----- actual output end -----


Are there any comments on it? Otherwise I'll add a bugreport for GNU classpath (assuming it's a classpath issue).



Marco
import java.io.File;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;


public class XmlTest extends DefaultHandler
{
	private static StringBuffer sbReadedXml = new StringBuffer();


	public static void main(String[] args) throws Exception
	{
		System.out.println("reading xml:");
		readXml(new File("test.xml"));

		System.out.println("\nwriting xml:");
		writeXml();
	}

	private static void readXml(File f) throws Exception
	{
		SAXParserFactory factory = SAXParserFactory.newInstance();
		factory.setValidating(false);
		SAXParser parser = factory.newSAXParser();
		parser.parse(f, new OwnHandler());

		System.out.println(sbReadedXml.toString());
	}

	private static void writeXml() throws Exception
	{
		SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();

		StreamResult stream = new StreamResult(System.out);
		TransformerHandler handler = factory.newTransformerHandler();
		Transformer trans=handler.getTransformer();
		trans.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
		trans.setOutputProperty(OutputKeys.INDENT,"yes");
		handler.setResult(stream); 
		handler.startDocument();
		AttributesImpl atts=new AttributesImpl();
		handler.startElement("", "", "test", atts);
		atts.clear();
		handler.startElement("", "", "foo", atts); 
		handler.characters(new char[]{'a','b','c'}, 0, 3);
		handler.endElement("", "", "foo");
		handler.endElement("", "", "test"); 
		handler.endDocument();
	}

	private static class OwnHandler extends DefaultHandler
	{
		public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) throws SAXException
		{
			sbReadedXml.append("<");
			sbReadedXml.append(qName);
			sbReadedXml.append(">");
	 	}

		public void endElement(String uri, String localName, String qName)	throws SAXException
		{
			sbReadedXml.append("</");
			sbReadedXml.append(qName);
			sbReadedXml.append(">");
		}

		public void characters(char[] buf, int offset, int len) throws SAXException
		{
			sbReadedXml.append(buf, offset, len);
		}
	}
}


<?xml version="1.0" encoding="UTF-8"?>
<test>
	<line>Just a line of Text.</line>
</test>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]