Java 使用xsom处理XSD时出现空指针异常
我有一个像这样的XSDJava 使用xsom处理XSD时出现空指针异常,java,xsd,nullpointerexception,xsom,Java,Xsd,Nullpointerexception,Xsom,我有一个像这样的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="r
<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>
堆栈跟踪
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)
提前感谢出现NullPointerException的原因 问题是没有错误处理程序来处理解析时抛出的异常,因此解析中的异常会导致返回null 将
org.xml.sax.ErrorHandler
的实现实例设置为ErrorHandler解决了这个问题
parser.setErrorHandler(new DOMErrorHandler());
DOMErrorHandler
是org.xml.sax.ErrorHandler的实现
为什么xs:include不起作用
解析器解析指定的XSD
的InputStream
。因此,它不会获得给定模式的systemId()
,必须使用该模式创建一个baseURI来访问包含的文件。因此,它将无法访问要包含的文件
因此,当我使用模式的
InputSource
调用parser.parse()
时,它工作得很好 为什么会发生NullPointerException
问题是没有错误处理程序来处理解析时抛出的异常,因此解析中的异常会导致返回null
将org.xml.sax.ErrorHandler
的实现实例设置为ErrorHandler解决了这个问题
parser.setErrorHandler(new DOMErrorHandler());
DOMErrorHandler
是org.xml.sax.ErrorHandler的实现
为什么xs:include不起作用
解析器解析指定的XSD
的InputStream
。因此,它不会获得给定模式的systemId()
,必须使用该模式创建一个baseURI来访问包含的文件。因此,它将无法访问要包含的文件
因此,当我使用模式的
InputSource
调用parser.parse()
时,它工作得很好 尝试单独解析class.xsd
。。。在这里您可以找到NGCCRuntimeEx
类的源代码。看看你是否可以调试它。你知道其他java XSD进程吗?如果你想让解析器找到它,我猜class.XSD必须在正确的位置。但是errormessage应该更好。请尝试单独解析class.xsd
。我使用相同的库解析了'class.xsd',效果很好。。。在这里您可以找到NGCCRuntimeEx
类的源代码。看看你是否可以调试它。你知道其他java XSD进程吗?如果你想让解析器找到它,我猜class.XSD必须在正确的位置。但是错误信息应该更好。