我有一个非常简单的xsd,它定义了一个元素“cache”
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://mysite/schema/cache"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mysite/schema/cache">
<xsd:complexType name="objectType" abstract="false">
<xsd:attribute name="target" type="xsd:string">
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="cacheType">
<xsd:sequence>
<xsd:element name="object" type="xsd:string" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="cache" type="cacheType"></xsd:element>
</xsd:schema>
我有一个弹簧配置文件:
<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net"
xmlns:cache="http://mysite/schema/cache"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mysite/schema/cache http://mysite/cache.xsd">
<description>
</description>
<cache:cache>
<cache:object target="site"/>
</cache:cache>
</objects>
致电
期间Spring.Objects.Factory.Xml.XmlObjectDefinitionReader.DoLoadObjectDefinitions at startup, I get the following error:
[XmlSchemaValidationException: The 'http://mysite/schema/cache:cache' element is not declared.]
这表明spring无法找到我的架构,但xsd可用。
为什么这不起作用的任何想法?
答案 0 :(得分:1)
您需要向Spring声明您的架构存在,请参阅appendix on schema authoring
特别是B.5节。注册处理程序和架构。
Spring使用两个文件来处理模式发现。
META-INF / spring.handlers包含XML Schema URI到命名空间处理程序类的映射。
META-INF / spring.schemas包含XML Schema位置的映射(在XML文件中引用模式声明,它使用模式作为'xsi:schemaLocation'属性的一部分)到classpath资源。