Pessoal, preciso validar o XML com o .XSD, acontece que o XSD tem dependências de outros dentro dele.
Preciso que seja validado dentro da aplicação sem referenciar recursos externos.
Segue meu código que não está funcionando porque não encontra o elemento “enviCTe”, lembrando que o mesmo XML quando validado usando os caminhos absolutos para o .XSD na pasta local o XML é validado corretamente.
O problema todo está em chamar os XSD dentro da aplicação mesmo:
[code]public List validarEnvio(String xml) throws SAXException, IOException {
erros = new ArrayList();
FacesContext context = FacesContext.getCurrentInstance();
URL urlLocalSchemaEnvio = context.getExternalContext().getResource("//resources//xsd//enviCTe_v2.00.xsd");
URL urlLocalSchemaTiposBasicos = context.getExternalContext().getResource("//resources//xsd//cteTiposBasico_v2.00.xsd");
URL urlLocalSchemaTipoGeral = context.getExternalContext().getResource("//resources//xsd//tiposGeralCTe_v2.00.xsd");
xml = normalizeXML(xml);
InputStream isXML = new ByteArrayInputStream(xml.getBytes());
SAXParser parser = new SAXParser();
ValidatorErroHandler handler = new ValidatorErroHandler();
// jndi:/default-host/pstransp/resources/xsd/enviCTe_v2.00.xsd
String strLocalSchemaEnvio = urlLocalSchemaEnvio.toExternalForm();
// para mostrar os erros de validação
parser.setFeature("http://xml.org/sax/features/validation", true);
// para validar usando um schema
parser.setFeature("http://apache.org/xml/features/validation/schema", true);
// para verificar todos os schemas
parser.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
parser.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", strLocalSchemaEnvio);
// habilita o manipulador de erros
parser.setErrorHandler(handler);
parser.parse(new InputSource(isXML));
return erros;
}
[/code]
Erro: cvc-elt.1.a: Cannot find the declaration of element ‘enviCTe’.
Pelo que li mesmo havendo dependências entre os XSD eu deveria passar apenas o principal.
O SAXParser utilizado lá é do Xerces 2.11
Alguém pode dar alguma dica sobre isso?