Im vorherigen Artikel habe ich Ihnen die Methode der Verwendung von XSD vorgestellt, um die SQLMapper -Konfigurationsdatei von MyBatis (1) zu überprüfen. Freunde, die es brauchen, können sich darauf beziehen.
Schreiben Sie die XSD -Datei und sehen Sie sich an, wie Sie die XSD -Datei verwenden, um sie zu überprüfen, und analysieren Sie die SQLMapper -Datei, dh die Methode doparSqlmapperResourcewithSchema () implementieren.
Um diese Funktion zu implementieren, gibt es zwei grundlegende Anforderungen:
(1) Kompatibilität: Es muss mit der nativen Konfiguration von mybatis kompatibel sein. Es gibt zwei Kompatibilitätsstufen. Eine ist die Verwendung der DTD -Überprüfung. Wie bereits erwähnt, gibt es kein Problem mit der Kompatibilität bei der Befolgung des ursprünglichen Prozesses. Die andere besteht darin, die XSD -Überprüfung zu verwenden, muss aber auch mit der nativen Konfiguration von mybatis kompatibel sein. Einerseits wird diese Kompatibilität aus der oben geänderten XSD -Datei garantiert, andererseits muss sie auch mit XML -Parsen garantiert werden.
(2) Erweiterbarkeit: Der Zweck der Änderung ist die Erweiterbarkeit, daher ist die Erweiterbarkeit ebenfalls eine grundlegende Anforderung. Die Skalierbarkeit ist jedoch nicht willkürlich und muss auch gemäß der Spezifikation erweitert werden, die eine benutzerdefinierte XSD -Datei ist.
Um diese beiden grundlegenden Anforderungen zu erfüllen, ist die folgende Idee.
1. Erstellen Sie einen EntityResolver und lesen Sie die Konfigurationsdatei des angegebenen Modus unter dem Klassenpfad, wie z.
2. Definieren Sie den Namespace -Meta -Informationen in der INI -Datei, wie z. B.:
Verwenden Sie den Namespace als Name des Abschnitts. Das folgende Schema und Parser stellen die XSD -Datei- und Parser -Implementierungsklasse des Namespace dar. Auf diese Weise finden Sie die Bestätigungsdatei basierend auf dem XSD -Namespace in XML und haben einen Parsing -Eintrag.
veranschaulichen:
Die Commons-Konfiguration von Apache bietet eine Lese-API für INI-Formatdateien
Im Frühjahr habe ich Meta-inf/Spring.Schemas und Meta-inf/Spring.Handler verwendet, um XSD-Dateien und Parser-Implementierungsklassen zu speichern. Hier habe ich es so geändert, dass die zentrale Ini -Datei -Konfiguration verwendet wird
Da es eine INI -Datei liest, die Wildcard -Zeichen unter allen Klassenpfadern erfüllt, kann sie problemlos andere Namespaces erweitern. Wie Sie XSD verwenden, um in Java zu verifizieren, werde ich hier nicht auf Details eingehen
Ich zersetze die Analyse von XML in drei Elemente: den Kontext analysieren, die Datei analysieren. Die DoparSeSQLMapperResourcewithSchema () -Methode ist ebenfalls sehr präzise:
Protected void doparSSQLMapperResourcewithSchema (Konfigurationskonfiguration, Ressourcen -MapperLocation) {isqlmapperParsertext context = new SQLMapperParSerContext (Konfiguration); xmlParserutilsxsexml (Kontext, MapperLocation);};};};};};};};};};};};Die Parser -Schnittstelle lautet wie folgt:
public interface iParser <e erweitert iParSercontext> {public void parse (e ParserContext, String -Ort); public void parse (e parsertext, String [] locationPatterns); public void Parse (E Parsertext, InputStream InputStream);Die Parsing -Kontext- und Parser -Implementierungsklassen sind wiederum in drei Ebenen unterteilt:
(1) Allgemeiner Parsing -Kontext:
public interface iParSercontext {public problemReporter getProblemReporter (); public EventListener getEventListener (); public SourceExtractor GetourceExtractor ();Die Parser -Implementierungsklasse auf der entsprechenden Ebene ist hauptsächlich für das Laden der Parsen -Dateien (z. B. die Wildkarten für Zeichenfolge in eine Sammlung von Ressourcenobjekten) verantwortlich, um sicherzustellen, dass keine wiederholte Parsen durchgeführt wird und die gleichzeitige Ausführung sicherstellt.
(2) XML -Parsing -Kontext
public interface ixmlParSerContext erweitert iParSerContext {public boolean isNamePaceAware (); Public Documentloader getDoCumentloader (); öffentlicher Entitätsolver GetEntityResolver (); öffentlicher Fehlerhandler getErrorHandler (); public xmlParSerDelegate getDelegate ();}Die Parser -Implementierungsklasse auf der entsprechenden Ebene ist hauptsächlich für die Konvertierung der Ressource in ein Dokumentobjekt und die Überprüfung des Konvertierungsprozesses verantwortlich.
(3) SQLMapper Parsing -Kontext
Die öffentliche Schnittstelle ISQLMapperParSerConText erweitert ixmlParSerContext {öffentliche Konfiguration getConfiguration ();}Die Parser -Implementierungsklasse auf der entsprechenden Ebene ist hauptsächlich dafür verantwortlich, den Parser im Namespace zu finden, in dem sich das Stammelement befindet, und mit dem Parser das Dokument analysieren.
Schließlich wird die Parsen in der INI -Konfigurationsdatei an die SchemasqlmapperNameSpace -Hauptklasse delegiert. Da diese Klasse jedoch in einer Textdatei konfiguriert werden muss, ist sie für Konstruktoren mit Parametern nicht bequem. Daher wird sie weiter an SchemasqlmapperParserDelegate delegiert:
public class SchemaSqlMapperNamespaceParser implements INamespaceParser<ISqlMapperParserContext> {@Overridepublic void init() {}@Overridepublic void parse(ISqlMapperParserContext parserContext, Document document, Resource resource) {SchemaSqlMapperParserDelegate delegate = NEU SCHEMASQLMAPPERPARSERDELEGATE (ParserContext, Dokument, Ressource); delegate.parse ();}@oversidepublic void destory () {}}Zu diesem Zeitpunkt wurde die XSD -Überprüfung abgeschlossen und das XML -Parsing -Portal wurde gefunden. Die anschließende reale Parsen befindet sich in SchemasqlmapperParserDelegate.
Das obige ist die Methode (2) für die Verwendung von XSD, um die SQLMapper -Konfigurationsdatei von MyBatis zu überprüfen, die der Editor Ihnen vorgestellt hat. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!