2

私はこのようなXSDを持っています

<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>

XSOM を使用してこの XSD を解析すると、Null Pointer Exception. <xs:include schemaLocation="class.xsd"/>要素を削除すると正常に動作します

 XSOMParser parser = new XSOMParser();
       parser.parse(inputStream);// -> this statement gives null pointer.

スタックトレース

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)

前もって感謝します

4

1 に答える 1

4

NullPointerExceptionが発生する理由 問題は、解析中にスローされた例外を処理するエラーハンドラーがないため、解析中に例外が発生するとnullが返されることです。

org.xml.sax.ErrorHandleras errorHandlerの実装のインスタンスを設定すると、問題が解決します。

parser.setErrorHandler(new DOMErrorHandler());

DOMErrorHandlerorg.xml.sax.ErrorHandlerの実装です。

xs:includeが機能しない理由

パーサーはInputStream、指定されたのを解析しますXSDsystemId()したがって、インクルードされたファイルにアクセスするためにbaseURIを作成する必要がある、指定されたスキーマのを取得しません。したがって、含まれるファイルにアクセスすることはできません。

したがって、スキーマを 呼び出すparser.parse()と、正常に機能します。InputSource

于 2013-01-02T07:13:59.343 に答える