Aplicação não enxerga includes no XSD

2 respostas
Rage

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:

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;
	}
onde ARQUIVO_XSD é uma contante com o nome do arquivo XSD:
private static final String ARQUIVO_XSD = "tissV2_01_03.xsd";
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:
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'ans:st_tipoTransacao' to a(n) type definition component.
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!

2 Respostas

R

E ae colega,

conseguiu resolver o problema? Estou como mesmo problema agora…

Rage

Resolvi da seguinte maneira, não sei se vai servir para você:
Acabei com os includes, e coloquei tudas as regras de validação em um único arquivo XSD.
Ficou monstro, mas funcionou.
Abs.

Criado 22 de outubro de 2008
Ultima resposta 12 de fev. de 2009
Respostas 2
Participantes 2