Bug 2485 - NullPointerExceptionusing Schema validation
Summary: NullPointerExceptionusing Schema validation
Status: RESOLVED FIXED
Alias: None
Product: Xerces-J
Classification: Unclassified
Component: SAX (show other bugs)
Version: 1.4.1
Hardware: PC Linux
: P3 normal
Target Milestone: ---
Assignee: Xerces-J Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2001-07-06 15:16 UTC by sullivan
Modified: 2004-11-16 19:05 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description sullivan 2001-07-06 15:16:35 UTC
Hi, I'm using Xerces 1.4.1 on RedHat 7.1 on
a Pentium with JDK:
Java(TM) 2 Runtime Environment,
Standard Edition (build 1.4.0-beta-b65)

When I attempt to use Schema validation I get
parse error: java.lang.NullPointerException
java.lang.NullPointerException
	at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1094)
	at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1122)
	at txmlapk.Txmld.<init>(Txmld.java:89)
	at txmlapk.Txmld.main(Txmld.java:38)

My java source and test files are below.
How can I get Schema validation running?

Many thanks,
Steve

===== begin Txmld.java =====

import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;

import org.apache.xerces.dom.TextImpl;
import org.apache.xerces.parsers.DOMParser;

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.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;

import vgenpk.Vgen;
import vgenpk.Vobject;


public class Txmld
implements ErrorHandler
{


	public static void main(
		String[] args)
	{
		new Txmld( args);
	}



	void badparms(
		String msg)
	{
		System.out.println("Error: " + msg);
		System.out.println("args: filename");
		System.exit( 1);
	}



	public Txmld(
		String[] args)
	{
		Document doc = null;
		if (args.length != 1) badparms("wrong num parms");
		String inuri = args[0];

		try {
			DOMParser parser = new DOMParser();

			parser.setFeature(
				"http://apache.org/xml/features/dom/defer-node-expansion",
				false);

			// Validation (must also set error handler):
			parser.setFeature(
				"http://xml.org/sax/features/validation",
				true);
			parser.setErrorHandler( this);

			// Namespace
			parser.setFeature(
				"http://xml.org/sax/features/namespaces",
				true);

			// Schema support
			parser.setFeature(
				"http://apache.org/xml/features/validation/schema",
				true);

			// Schema full constraint checking
            parser.setFeature(
			"http://apache.org/xml/features/validation/schema-full-checking",
				true);

			System.out.println("inuri: \"" + inuri + "\"");
			parser.parse( inuri);
			doc = parser.getDocument();
        }
		catch (Exception spe) {
			System.out.println( "parse error: " + spe);
			spe.printStackTrace();
			System.exit(1);
		}

	} // end constructor



	// ErrorHandler interface
	public void error( SAXParseException exc) {
		System.out.println("ErrorHandler: error: " + exc);
	}
	public void fatalError( SAXParseException exc) {
		System.out.println("ErrorHandler: fatalError: " + exc);
	}
	public void warning( SAXParseException exc) {
		System.out.println("ErrorHandler: warning: " + exc);
	}

} // end class Txmld

===== end file =====





===== begin tempa.xml =====
<?xml version="1.0" encoding="UTF-8"?>
<personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:noNamespaceSchemaLocation="tempa.xsd">

  <person id="Big.Boss" >
    <name><family>Boss</family> <given>Big</given></name>
    <email>chief@foo.com</email>
    <link subordinates="one.worker two.worker three.worker four.worker
five.worker"/>
  </person>

  <person id="one.worker">
    <name><family>Worker</family> <given>One</given></name>
    <email>one@foo.com</email>
    <link manager="Big.Boss"/>
  </person>

  <person id="two.worker">
    <name><family>Worker</family> <given>Two</given></name>
    <email>two@foo.com</email>
    <link manager="Big.Boss"/>
  </person>

  <person id="three.worker">
    <name><family>Worker</family> <given>Three</given></name>
    <email>three@foo.com</email>
    <link manager="Big.Boss"/>
  </person>

  <person id="four.worker">
    <name><family>Worker</family> <given>Four</given></name>
    <email>four@foo.com</email>
    <link manager="Big.Boss"/>
  </person>

  <person id="five.worker">
    <name><family>Worker</family> <given>Five</given></name>
    <email>five@foo.com</email>
    <link manager="Big.Boss"/>
  </person>

</personnel>
===== end file =====





===== begin tempa.xsd =====
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

 <xs:element name="personnel">
  <xs:complexType>
   <xs:sequence>
     <xs:element ref="person" minOccurs='1' maxOccurs='unbounded'/>
   </xs:sequence>
  </xs:complexType>

  <xs:unique name="unique1">
   <xs:selector xpath="person"/>
   <xs:field xpath="@name"/>
  </xs:unique>
  <xs:key name='empid'>
   <xs:selector xpath="person"/>
   <xs:field xpath="@id"/>
  </xs:key>
  <xs:keyref name="keyref1" refer='empid'>
   <xs:selector xpath="person"/> 
   <xs:field xpath="link/@manager"/>  
  </xs:keyref>

 </xs:element>

 <xs:element name="person">
  <xs:complexType>
   <xs:sequence>
     <xs:element ref="name"/>
     <xs:element ref="email" minOccurs='0' maxOccurs='unbounded'/>
     <xs:element ref="url"   minOccurs='0' maxOccurs='unbounded'/>
     <xs:element ref="link"  minOccurs='0' maxOccurs='1'/>
   </xs:sequence>
   <xs:attribute name="id"  type="xs:ID" use='required'/>
   <xs:attribute name="note" type="xs:string"/>
   <xs:attribute name="contr" default="false">
    <xs:simpleType>
     <xs:restriction base = "xs:string">
       <xs:enumeration value="true"/>
       <xs:enumeration value="false"/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
   <xs:attribute name="salary" type="xs:integer"/>
  </xs:complexType>
 </xs:element>

 <xs:element name="name">
  <xs:complexType>
   <xs:all>
    <xs:element ref="family"/>
    <xs:element ref="given"/>
   </xs:all>
  </xs:complexType>
 </xs:element>

 <xs:element name="family" type='xs:string'/>

 <xs:element name="given" type='xs:string'/>

 <xs:element name="email" type='xs:string'/>

 <xs:element name="url">
  <xs:complexType>
   <xs:attribute name="href" type="xs:string" default="http://"/>
  </xs:complexType>
 </xs:element>

 <xs:element name="link">
  <xs:complexType>
   <xs:attribute name="manager" type="xs:IDREF"/>
   <xs:attribute name="subordinates" type="xs:IDREFS"/>
  </xs:complexType>
 </xs:element>

 <xs:notation name='gif' public='-//APP/Photoshop/4.0' system='photoshop.exe'/>

</xs:schema>
===== end file =====
Comment 1 sandygao 2001-07-09 08:44:06 UTC
This bug had been fixed in CVS. Go grab the latest version.
Comment 2 sullivan 2001-07-09 10:23:10 UTC
I just installed and tested with: xml-xerces_20010709114340.tar.gz
The bug still exists:
java.lang.NullPointerException
	at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1094)
	at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1122)
	at txmlapk.Txmld.<init>(Txmld.java:89)
	at txmlapk.Txmld.main(Txmld.java:38)
Comment 3 sandygao 2001-07-09 12:01:25 UTC
so your program triggered more than one bug :-) Now it's fixed in CVS.

when defer-node-expansion is set to false in DOMParser, 
fDocumentHandle.characters() should be the last method to call when processing 
characters and whitespaces. (XMLValidator.java)