No artigo anterior, apresentei a você o método de usar o XSD para verificar o arquivo de configuração SQLMapper do Mybatis (1). Amigos que precisam podem se referir a ele.
Escreva o arquivo XSD e veja como usar o arquivo XSD para verificá -lo e analise o arquivo SQLMAPPER, ou seja, implemente o método DoparsqlMapperSourceWithSchema ().
Para implementar esta função, existem dois requisitos básicos:
(1) Compatibilidade: ele precisa ser compatível com a configuração nativa do mybatis. Existem dois níveis de compatibilidade. Um é usar a verificação do DTD. Como mencionado anteriormente, não há problema com a compatibilidade ao seguir o processo original; O outro é usar a verificação do XSD, mas também precisa ser compatível com a configuração nativa do Mybatis. Por um lado, essa compatibilidade é garantida do arquivo XSD modificado acima e, por outro lado, também precisa ser garantido na análise XML.
(2) Extensibilidade: O objetivo da modificação é expandibilidade, portanto, a extensibilidade também é um requisito básico. No entanto, a escalabilidade não é arbitrária e também precisa ser estendida de acordo com a especificação, que é um arquivo XSD personalizado.
Para atender a esses dois requisitos básicos, o seguinte é a minha ideia, principalmente desenhando o espaço para nome personalizado da Spring:
1. Crie um entityResolver e leia o arquivo de configuração do modo especificado no caminho da classe, como: "ClassPath*: **/DYSD-*-Namespaces.ini"
2. Defina meta -informação no namespace no arquivo ini, como:
Use o espaço para nome como o nome da seção. O esquema e o analisador abaixo representam a classe de implementação do arquivo XSD e o analisador do espaço para nome, respectivamente. Dessa forma, você pode encontrar o arquivo de verificação com base no espaço para nome do XSD no XML e ter uma entrada de análise.
ilustrar:
A Configuração do Commons da Apache fornece uma API de leitura para arquivos de formato INI
Na primavera, usei meta-inf/spring.schema e meta-inf/spring.handlers para armazenar arquivos XSD e classes de implementação do analisador. Aqui o modifiquei para usar a configuração central do arquivo ini
Como está lendo um arquivo INI que satisfaz os caracteres curinga em todos os caminhos de classe, ele pode expandir facilmente outros namespaces. Quanto a como usar o XSD para verificar em java, não vou entrar em detalhes aqui
Decomponho a análise do XML em três elementos: analisando o contexto, analisando o arquivo. O método DoparsSqlMapperResourceWithSchema () também é muito conciso:
Void protegido doparsqlMapperResourceWithSchema (Configuração da configuração, MapperLocation) {ISQLMapperParserContext Context = new SQLMapperParserContext (Configuration); XmlParserUTils.Parsexml (contexto, contexto, manifestação);A interface do analisador é a seguinte:
Interface pública Iparser <e estende IparserContext> {public void parse (e parserContext, localização da string); public void parse (parserContext, string [] locationPatterns); Public void parse (parsercOnToNext, InputSTream);O contexto de análise e as classes de implementação do analisador são divididos em três níveis, por sua vez:
(1) contexto geral de análise:
interface pública IparserContext {public ProblemReporter getProblemReporter (); public EventListener getEventListener (); public sourcextractor getSourceExtractor (); public Ambient Getenvironment ();}A classe de implementação do analisador no nível correspondente é principalmente responsável pelo carregamento dos arquivos analisados (como carregar cards selvagens de string em uma coleção de objetos de recursos), garantindo que nenhuma análise repetida seja realizada e garantindo a execução simultânea.
(2) contexto de análise XML
interface pública ixmlparserContext estende iparserContext {public boolean isnamespaceaware (); Public DocumentLoader getDocumentLoader (); Public entityResolver getentityResolver (); public errorHandler getErrorHandler (); public xmlparserDelegate getDelegate ();}A classe de implementação do analisador no nível correspondente é principalmente responsável por converter o recurso em um objeto de documento e verificá -lo durante o processo de conversão.
(3) contexto de análise Sqlmapper
interface pública isqlmapperParserContext estende ixmlParserContext {public Configuration getConfiguration ();}A classe de implementação do analisador no nível correspondente é principalmente responsável por encontrar o analisador no espaço para nome em que o elemento raiz está localizado e usando o analisador para analisar o documento.
Finalmente, a análise é delegada à classe SchemasqlMapperNamesPaceParser no arquivo de configuração INI. No entanto, como essa classe precisa ser configurada em um arquivo de texto, não é conveniente para os construtores com parâmetros, por isso é ainda mais delegado ao schemasqlmapperParserDelegate:
public class SchemaSqlMapperNamespaceParser implements INamespaceParser<ISqlMapperParserContext> {@Overridepublic void init() {}@Overridepublic void parse(ISqlMapperParserContext parserContext, Document document, Resource resource) {SchemaSqlMapperParserDelegate delegate = new SchemasqlmapperParserDelegate (parserContext, documento, recurso); delegate.parse ();}@substituir o vazio de void devory () {}}Nesse ponto, a verificação do XSD foi concluída e o portal de análise XML foi encontrado. A análise real subsequente está em schemasqlmapperParserDelegate.
O exposto acima é o método (2) para usar o XSD para verificar o arquivo de configuração SQLMAPPA do Mybatis que o editor apresentou a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!