Boa noite amigos javeiros…
Tenho uma aplicação que valida a estrutura de arquivos XML á partir de um XSD.
Ótimo. Possuo um método Boolean que recebe um objeto do tipo File com a locação do arquivo XML, e dentro deste método, ele busca pelo arquivo XSD e a partir daí ele valida a estrutura do XML verificando se está de acordo com o XSD. O método é este:
[code]private boolean validaXml(File f) throws IntegrationException {
boolean result = false;
try {
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
parserFactory.setValidating(true);
SAXParser parser = parserFactory.newSAXParser();
parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
parser.setProperty(JAXP_SCHEMA_SOURCE, Thread.currentThread().getContextClassLoader().getResourceAsStream(ARQUIVO_XSD));
parser.parse(f, new ValidatorHandler());
result = true;
} catch (SAXException e) {
LOGGER.fatal(e);
result = false;
} catch (IOException e) {
LOGGER.fatal(e);
result = false;
}
return result;
}[/code]onde ARQUIVO_XSD é uma contante com o nome do arquivo XSD: [code]private static final String ARQUIVO_XSD = "tissV2_01_03.xsd";[/code] Perfeito. Acontece que este XSD possui INCLUDES para mais 3 outros arquivos XSD, e estes arquivos se encontram online, num servidor da web. Até então, esses includes simplesmente apontavam para o endereço remoto onde esses arquivos XSD se encontram, e tudo funcionava bem.
Porém, agora estes 3 arquivos não estarão mais remotos, mas sim locais. E o include não funciona, eu ate imagino o porque, se o arquivo XSD principal é carregado na memória, por algum motivo, quando a minha aplicação chama ele, somente ele vem, e as definições que se encontram nos arquivos secundários não ficam visíveis, e aí dá um erro, pois definições que são chamdas no XSD principal não estão disponíveis na memória.
O erro que está dando é o seguinte: [quote]org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name ‘ans:st_tipoTransacao’ to a(n) type definition component.[/quote] Este nome que ele não consegue resolver está justamente em um dos arquivos secundários (que são chamados via include) e agora que estão locais, não estão mais disponíveis. Alguém sabe como resolver isso?
Desculpem por escrever tanto, mas quis explicar exatamente o problema.
Agradeço desde já qualquer ajuda ou intenção.
Vlw´[]s!