Pessoal,
tenho um WebServices que vai receber do client um arquivo XML (uma String). Eu tenho o XSD desse arquivo XML que vou receber. Mas não sei como é que faço a validação desse XML em tempo de execução.
Alguém sabe como eu faço isso? :oops:
obs: p/ navegar no xml eu tô usando XStream…
Para validar um XML com XSD, use um parser como DOM ou SAX (acho que o XStream não faz essa validação). Exemplo de uso de validação:
// A função a seguir retorna só um DocumentBuilder. Para efetuar o "parse", chame o método "parse" sobre o DocumentBuilder retornado.
public static DocumentBuilder getDOMParser(final String nomeArquivoXSD) {
DocumentBuilder parser = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// Efetuar validação
dbf.setValidating(true);
// Specifies that the parser produced by this code will ignore comments.
dbf.setIgnoringComments(true);
// Specifies that the parsers created by this factory must eliminate
// whitespace in element content (sometimes known loosely as
// 'ignorable whitespace') when parsing XML documents (see XML Rec 2.10).
dbf.setIgnoringElementContentWhitespace(true);
// Specifies that the parser produced by this code will convert CDATA
// nodes to Text nodes and append it to the adjacent (if any) text node.
dbf.setCoalescing(true);
// Usar o "schema" para fazer validação
dbf.setAttribute("http://apache.org/xml/features/validation/schema", Boolean.TRUE);
// Especificar o "schema"
// Note que requer um nome de arquivo.
dbf.setAttribute(
"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",nomeArquivoXSD);
// Criar o parser
parser = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
}
return parser;
}
Valeu thingol
Olá Thingol…
Será que no caso do uso de uma DTD para ser feita a estruturação este tipo de validação seria útil, seria apenas a substituição do “schema” por “dtd”?
E também já fiz o parse utilizando o DOM … agora seria só necessário fazer a inclusão dessas novas linhas de código para ser feita a validação? Esta DTD no caso poderia ser interna ou externa, bastaria apenas sua referência, o local onde está armazenada?
Obrigada.