Abin Manathoor Devasia
Abin Manathoor Devasia

Reputation: 1973

Null pointer Exception when processing XSD using xsom

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

Answers (1)

Abin Manathoor Devasia
Abin Manathoor Devasia

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

Related Questions