Spring配置文件无法解析我自己的架构中定义的元素

时间:2009-08-18 10:50:06

标签: .net xsd spring.net

我有一个非常简单的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可用。

为什么这不起作用的任何想法?

1 个答案:

答案 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资源。