Dans l'article précédent, je vous ai présenté la méthode d'utilisation de XSD pour vérifier le fichier de configuration SQLMapper de MyBatis (1). Les amis qui en ont besoin peuvent y faire référence.
Écrivez le fichier XSD, puis voyez comment utiliser le fichier XSD pour le vérifier et analyser le fichier sqlmapper, c'est-à-dire implémentez la méthode doparsesqlmappersourcewithschema ().
Afin de mettre en œuvre cette fonction, il existe deux exigences de base:
(1) Compatibilité: il doit être compatible avec la configuration native de MyBatis. Il y a deux niveaux de compatibilité. L'une consiste à utiliser la vérification DTD. Comme mentionné précédemment, il n'y a aucun problème avec la compatibilité lors du suivi du processus d'origine; L'autre consiste à utiliser la vérification XSD, mais elle doit également être compatible avec la configuration native de MyBatis. D'une part, cette compatibilité est garantie à partir du fichier XSD modifié ci-dessus, et d'autre part, il doit également être garanti à partir de l'analyse XML.
(2) Extensibilité: le but de la modification est de l'extensibilité, donc l'extensibilité est également une exigence de base. Cependant, l'évolutivité n'est pas arbitraire, et elle doit également être étendue en fonction de la spécification, qui est un fichier XSD personnalisé.
Afin de répondre à ces deux exigences de base, ce qui suit est mon idée, en dessinez principalement sur l'espace de noms personnalisé de Spring:
1. Créez un entityResolver et lisez le fichier de configuration du mode spécifié sous le ClassPath, tels que: "ClassPath *: ** / dysd - * - namespaces.ini"
2. Définissez les méta-informations de l'espace de noms dans le fichier INI, telles que:
Utilisez l'espace de noms comme nom de la section. Le schéma et l'analyseur ci-dessous représentent respectivement le fichier XSD et la classe d'implémentation d'analyseur de l'espace de noms. De cette façon, vous pouvez trouver le fichier de vérification basé sur l'espace de noms XSD dans XML et avoir une entrée d'analyse.
illustrer:
La configuration Commons d'Apache fournit une API de lecture pour les fichiers de format INI
Au printemps, j'ai utilisé Meta-Inf / Spring.schemas et Meta-Inf / Spring.Handlers pour stocker des fichiers XSD et des classes d'implémentation de l'analyseur. Ici, je l'ai modifié pour utiliser la configuration centrale du fichier INI
Parce qu'il lit un fichier INI qui satisfait les caractères génériques sous tous les chemins de classe, il peut facilement étendre d'autres espaces de noms. Quant à savoir comment utiliser XSD pour vérifier en Java, je n'entrerai pas dans les détails ici
Je décompose l'analyse de XML en trois éléments: analysant le contexte, analysant le fichier. La méthode doparsesqlmappersourcewithschema () est également très concise:
Protected void doparsesqlmapperresourcewithschema (configuration de configuration, ressource mapperlocation) {iSqlMapperParserContext context = new SqlMapperParserContext (configuration); xmlparserUtils.parsexml (context, mapperlocation);}L'interface de l'analyseur est la suivante:
Interface publique IPARSER <E étend iParserConText> {public void parse (e ParserContext, String Location); public void parse (e ParserContext, intringStream InputStream); public void parse (e ParserContext, ressources de ressources);}Le contexte d'analyse et les classes de mise en œuvre de l'analyseur sont divisés en trois niveaux à leur tour:
(1) Contexte d'analyse générale:
Interface publique iParserConText {public ProblemReporter GetProblemReporter (); public EventListener GetEventListener (); public SourceExtractor getourceExtractor (); public Environment Getenvironment ();}La classe d'implémentation de l'analyseur au niveau correspondant est principalement responsable du chargement des fichiers analysés (tels que le chargement des caractères génériques de chaîne dans une collection d'objets de ressource), garantissant qu'aucun analyse répétée n'est effectué et garantissant une exécution simultanée.
(2) Contexte d'analyse XML
Interface publique ixmlParserContext étend iParserConText {public boolean isNamespaceaware (); Public DocumentLoader GetDocumentLoader (); public EntityResolver GetentityResolver (); public ErrorHandler getErrorHandler (); public xmlParserDelegate getDelegate ();}La classe de mise en œuvre de l'analyseur au niveau correspondant est principalement responsable de la conversion de la ressource en un objet de document et de la vérification pendant le processus de conversion.
(3) contexte de l'analyse sqlmapper
Interface publique IsqlMapperParserContext étend ixmlParserConText {Public Configuration getConfiguration ();}La classe d'implémentation de l'analyseur au niveau correspondant est principalement responsable de la recherche de l'analyseur dans l'espace de noms où se trouve l'élément racine et de l'utilisation de l'analyseur pour analyser le document.
Enfin, l'analyse est déléguée à la classe SchemasqlMappenamesPaceParser dans le fichier de configuration INI. Cependant, comme cette classe doit être configurée dans un fichier texte, il n'est pas pratique pour les constructeurs avec des paramètres, il est donc davantage délégué à ScheMasqlMapperParserDelegate:
classe publique schémasqlmappenamespaceparser implémente inamespaceparser <isqlmapperParserContext> {@OverRidePublic void init () {} @OverridePublic Void Parse (iSqlMapperParserContext ParserContex SchémasqlmapperParserDelegate (parserContext, document, ressource); delegate.psese ();} @ overRidepublic void destory () {}}À ce stade, la vérification XSD est terminée et le portail d'analyse XML a été trouvé. L'analyse réelle subséquente est dans ScheMasqlMapperParserDelegate.
Ce qui précède est la méthode (2) d'utiliser XSD pour vérifier le fichier de configuration SQLMapper de MyBatis que l'éditeur vous a présenté. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!