En el artículo anterior, le presenté el método de usar XSD para verificar el archivo de configuración SQLMapper de MyBatis (1). Los amigos que lo necesitan pueden referirse a él.
Escriba el archivo XSD, luego vea cómo usar el archivo XSD para verificarlo y analizar el archivo SQLMapper, es decir, implementar el método dopoSSQLMapPreResourceWithSchema ().
Para implementar esta función, hay dos requisitos básicos:
(1) Compatibilidad: debe ser compatible con la configuración nativa de MyBatis. Hay dos niveles de compatibilidad. Uno es usar la verificación DTD. Como se mencionó anteriormente, no hay problema con la compatibilidad cuando se sigue el proceso original; El otro es usar la verificación XSD, pero también debe ser compatible con la configuración nativa de MyBatis. Por un lado, esta compatibilidad está garantizada desde el archivo XSD modificado anteriormente, y por otro lado, también debe garantizarse desde el análisis XML.
(2) Extensibilidad: el propósito de la modificación es expandir la capacidad, por lo que la extensibilidad también es un requisito básico. Sin embargo, la escalabilidad no es arbitraria, y también debe extenderse de acuerdo con la especificación, que es un archivo XSD personalizado.
Para cumplir con estos dos requisitos básicos, la siguiente es mi idea, principalmente basada en el espacio de nombres personalizado de Spring:
1. Cree un entityResolver y lea el archivo de configuración del modo especificado en el classpath, como: "classpath*: **/disd-*-namespaces.ini"
2. Defina la meta de meta de espacio en el archivo INI, como:
Use el espacio de nombres como el nombre de la sección. El esquema y el analizador a continuación representan el archivo XSD y la clase de implementación del analizador del espacio de nombres respectivamente. De esta manera, puede encontrar el archivo de verificación basado en el espacio de nombres XSD en XML y tener una entrada de análisis.
ilustrar:
La configuración de Commons de Apache proporciona una API de lectura para archivos de formato INI
En primavera, utilicé Meta-Inf/Spring.Schemas y Meta-Inf/Spring.Handlers para almacenar archivos XSD y clases de implementación de analizador. Aquí lo modifiqué para usar la configuración central del archivo INI
Debido a que está leyendo un archivo INI que satisface los personajes comodín en todos los classpaths, puede expandir fácilmente otros espacios de nombres. En cuanto a cómo usar XSD para verificar en Java, no entraré en detalles aquí
Descompuso el análisis de XML en tres elementos: analizar el contexto, analizar el archivo. El método dopoSesqlMappResourceWithSchema () también es muy conciso:
DOPARSESQLMAPPERSOURSECTROURECHEMA DE DOPOSSQLMAPRECE DEL PERSONAS (configuración de configuración, Configuración de la configuración, recursos mapeLocation) {isqlMapperParserContext context = new SqlMapperParParserContext (configuración); XmlParserUtilss.Parsexml (context, mapePlocation);}La interfaz analizador es la siguiente:
interfaz pública iParser <e extiende iParsercontext> {public void parse (e parserContext, string ubicación); public void parse (e parserContext, string [] ubicación de ubicación); public void parse (e parsercontexEl contexto de análisis y las clases de implementación de analizador se dividen en tres niveles a su vez:
(1) Contexto general de análisis:
interfaz pública iParserContext {public ProblemReporter getProblemReporter (); public EventListener getEventListener (); Public SourceExtractor getSourceExtractor (); Public Environment Getenvironment ();}La clase de implementación de analizador en el nivel correspondiente es el principal responsable de cargar los archivos analizados (como la carga de comodines en una colección de objetos de recursos), asegurando que no se realice un análisis repetido y garantizar la ejecución concurrente.
(2) contexto de análisis XML
interfaz pública ixmlParsercontext extiende iParsercontext {public boolean isnamespaceAware (); Public Documento GetDocumentLoader (); Public EntityResolver getEntityResolver (); Public ErrorHandler getErrorHandler (); public XmlParserDelegate getDelegate ();}La clase de implementación de analizador en el nivel correspondiente es el principal responsable de convertir el recurso en un objeto de documento y verificarlo durante el proceso de conversión.
(3) contexto de análisis de SQLMapper
La interfaz pública ISQLMapperParserContext extiende ixmlParserContext {Configuración pública getConfiguration ();}La clase de implementación de analizador en el nivel correspondiente es el principal responsable de encontrar el analizador en el espacio de nombres donde se encuentra el elemento raíz y usar el analizador para analizar el documento.
Finalmente, el análisis se delega a la clase SchemasQLMApPernamesPaCeparser en el archivo de configuración INI. Sin embargo, debido a que esta clase debe configurarse en un archivo de texto, no es conveniente para constructores con parámetros, por lo que se delega aún más a SchemasQLMapperParserDelegate:
clase pública schemasqlMappernamesPaCeParser implementos inamesPaCeParser <isqlMapperParSerContext> {@OverridePublic Void init () {} @OverridePublic Void parse (iSQLMApPERPERPARSERSERCONEXTEX de parsercontext, documento, documento, recurso de recursos) {SchemaSpParParParParReLEGATEDEDEXE = DOCUMENTOD Document Document, recurso de recursos) SchemasqlMapperParSerDelegate (parserContext, document, recurse); delegate.parse ();}@overridePublic void destory () {}}En este punto, se ha completado la verificación XSD y se ha encontrado el portal de análisis XML. El análisis real posterior se encuentra en SchemasqlMapperParserDelegate.
Lo anterior es el método (2) para usar XSD para verificar el archivo de configuración SQLMapper de MyBatis que el editor le presentó. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!