2009-08-18 10 views
1

j'ai un xsd très simple qui définit un élément « cache »fichier de configuration Spring ne peut pas analyser les éléments définis dans mon propre schéma

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

J'ai un fichier de configuration de printemps avec:

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

Au cours de l'appel à

Spring.Objects.Factory.Xml.XmlObjectDefinitionReader.DoLoadObjectDefinitions at startup, I get the following error: 
    [XmlSchemaValidationException: The 'http://mysite/schema/cache:cache' element is not declared.] 

Ceci suggère que le ressort ne peut pas trouver mon schéma, mais le xsd est disponible.

Des idées pour lesquelles cela ne fonctionne pas?

Répondre

1

Vous devez déclarer au printemps que votre schéma existe, Voir la appendix on schema authoring

section B.5 Plus précisément. Enregistrement du gestionnaire et du schéma. Spring utilise deux fichiers pour gérer la découverte de schéma. META-INF/spring.handlers contient un mappage d'URI de schéma XML vers des classes de gestionnaire d'espaces de noms. META-INF/spring.schemas contient un mappage des emplacements XML Schema (référencé avec la déclaration de schéma dans les fichiers XML qui utilisent le schéma dans le cadre de l'attribut 'xsi: schemaLocation') pour les ressources de chemin de classe.

+0

Eh bien, j'ai défini un analyseur d'espace de noms et cela fonctionne maintenant .. mis à part le fait que mon schéma semble être le cul – iasksillyquestions

+0

Mon xsd n'avait pas l'attribut elementFormDefault = "qualifié"! – iasksillyquestions

+0

Pour plus de détails sur l'utilisation de elementFormDefault, consultez cette discussion: http://www.xfront.com/HideVersusExpose.html –