Reputation: 1973
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
Upvotes: 2
Views: 2016
Reputation: 1973
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.ErrorHandler
as errorHandler solves the issue.
parser.setErrorHandler(new DOMErrorHandler());
DOMErrorHandler
is the implementation of org.xml.sax.ErrorHandler.
Why xs:include doesn't work
The parser parses the InputStream
of the specified XSD
. So it won't get the systemId()
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()
with InputSource
of the schema, it works fine.
Upvotes: 4