i have an XSD like this
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="www.aaa.com/aa" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="class.xsd"/>
<xs:element name="record">
<xs:complexType>
<xs:sequence>
<xs:element name="Stud" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="fname" type="xs:string"/>
<xs:element name="lname" type="xs:string"/>
........
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
When i parse this XSD using XSOM it gives Null Pointer Exception. When i remove the <xs:include schemaLocation="class.xsd"/> element it works fine
XSOMParser parser = new XSOMParser();
parser.parse(inputStream);// -> this statement gives null pointer.
Stack trace
Exception in thread "main" java.lang.NullPointerException
at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.parseEntity(NGCCRuntimeEx.java:327)
at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.includeSchema(NGCCRuntimeEx.java:234)
at com.sun.xml.xsom.impl.parser.state.includeDecl.action0(includeDecl.java:42)
at com.sun.xml.xsom.impl.parser.state.includeDecl.leaveElement(includeDecl.java:109)
at com.sun.xml.xsom.impl.parser.state.NGCCRuntime.endElement(NGCCRuntime.java:275)
at org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:546)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333)
at com.sun.xml.xsom.parser.JAXPParser.parse(JAXPParser.java:115)
at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.parseEntity(NGCCRuntimeEx.java:337)
at com.sun.xml.xsom.impl.parser.ParserContext.parse(ParserContext.java:124)
at com.sun.xml.xsom.parser.XSOMParser.parse(XSOMParser.java:183)
at com.sun.xml.xsom.parser.XSOMParser.parse(XSOMParser.java:138)
thanks in advance
Why NullPointerException occurs
The problem is that there is no error handler to handle the exception thrown while parsing and hence an exception in parsing causes returning of null.
Setting the instance of an implementation of
org.xml.sax.ErrorHandleras errorHandler solves the issue.DOMErrorHandleris the implementation of org.xml.sax.ErrorHandler.Why xs:include doesn’t work
The parser parses the
InputStreamof the specifiedXSD. So it won’t get thesystemId()of given schema, using which a baseURI has to be created for accessing included files. Thus it won’t be able to access the file to be included.So when i call
parser.parse()withInputSourceof the schema, it works fine.