Pergunta sobre xml-validation, jaxb, jaxb2 – Validar xml criado usando o jaxb em um arquivo xsd

9

Eu tenho um arquivo xml criado usando o jaxb. Eu preciso validá-lo contra um documento xsd. É possível apenas fazer validação sem desmarcar. Eu preciso imprimir os erros no arquivo xml.

Você pode definir Schema e ValidationEventHandler no marshaller em si. Valida contra o esquema durante o empacotamento. Vejodocs.oracle.com/javase/6/docs/api/javax/xml/bind/… Ritesh
Uma das principais vantagens de gerar um código de ligação a partir do xsd e usar o código para criar uma instância xml é produzir um xml válido e bem formado. Não tenho certeza por que você quer validá-lo novamente? Aravind R. Yarram

Sua resposta

1   a resposta
11

você pode usar o validador encontrado em java a partir de 1.5. aqui é a referênciadoc

Além disso, você pode usar a API baseada em dom ou baseada em fluxo para validar seu documento XML em relação ao arquivo xsd. Se você deseja usar o SAX API para sua tarefa, então, ouvir é o exemplo:

try {
    String schemaLang = "http://www.w3.org/2001/XMLSchema";

    SchemaFactory factory = SchemaFactory.newInstance(schemaLang);

    Schema schema = factory.newSchema(new StreamSource("sample.xsd"));
    Validator validator = schema.newValidator();

    validator.validate(new StreamSource("test.xml"));

} catch (SAXException e) {
    System.out.println(" sax exception :" + e.getMessage());
} catch (Exception ex) {
    System.out.println("excep :" + ex.getMessage());
}

Caso contrário, você pode usar a API DOM, DOM4J ou XOM. Para referência futura, você pode verAqui.

Existe um relacionadoresponda em stackoverflow também.

Estou recebendo essa exceção de sax de exeception: O alvo de instrução de processamento correspondente a "[xX] [mM] [lL]" não é permitido. AutoMEta
isso significa que no seu início XML ele tem algum espaço, remove espaço ou qualquer outra coisa no começo do seu XML, siga o link:gonithethinker.blogspot.com/2012/06/… @AutoMeta Forhad
Você pode validar antes do empacotamento também: fonte JAXBSource = new JAXBSource (jaxbContext, objectBeingMarshalled); validator.validate (fonte); Ritesh

Perguntas relacionadas