我在同一个Escape
文件夹中有两个.xsd
个文件:
src/main/resource
看起来像这样:
outer.xsd
和<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://project.domain.com/model"
targetNamespace="http://project.domain.com/model"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="inner.xsd"/>
<xs:element name="innerObject" type="tns:InnerObjectType"/>
</xs:schema>
看起来像这样:
inner.xsd
现在,在另一个项目中,我使用<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:model="http://project.domain.com/model"
targetNamespace="http://project.domain.com/model"
elementFormDefault="qualified" attributeFormDefault="qualified" version="1.0">
<xs:complexType name="InnerObjectType">
<xs:sequence>
<xs:element name="property1" type="xs:string"/>
<xs:element name="property2" type="xs:string"/>
</xs:sequence>
<xs:complexType>
</xs:schema>
来验证输入XML文件,如下所示:
outer.xsd
在我调用SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
ClassLoader classLoader = objectType.getClassLoader();
InputStream stream = classLoader.getResourceAsStream(schemaPath);
Source schemaSource = new StreamSource(stream);
Schema schema = factory.newSchema(schemaSource);
...
} catch (SAXException exception) {...}
的行上,我收到以下异常:
newSchema
看来这段代码能够通过路径找到外部模式,但在解析内部类型的过程中,它无法找到内部模式。
有人建议我如何解决这个内在类型?
注意:我能够使用src-resolve: Cannot resolve the name 'tns:InnerObjectType' to a(n) 'type definition' component.
在eclipse中生成XML文件,所以我相对确定outer.xsd
文件的结构是正确的......它只是无论在.xsd
被解析时的上下文是什么,都无法访问outer.xsd
。
一个平行的问题是:我如何找出正在解决类型的上下文? (即......在哪里寻找inner.xsd
?)