3
respostas

Validação XSD com JAXB e tratamento de exceções de negócio

Fala galera, Após concluir o curso de desenvolvimento de serviços REST fiquei com uma dúvida sobre a validação de dados de entrada: Supondo que meu serviço receba um XML de entrada e eu esteja utilizando o JAXB para deserializar a mensagem, como eu posso fazer para usar um XSD para fazer a validação da informação que chega? Nesse caso ainda, caso a validação falhe, ou qualquer outra exceção de regra de negócio seja gerada, eu gostaria de informar ao meu cliente o erro que ocorreu. Além de retornar um status code 500 (talvez), gostaria de dar uma mensagem contendo o erro gerado. Isso poderia ser anexado ao header da response? Essa seria a melhor forma de fazer, ou eu deveria retornar um XML nesse caso? Obrigado

3 respostas

Oi Victor, vc pode retornar o status 400 e colocar a mensagem de validação no corpo da sua resposta. Como seu tipo de dados é XML, essa resposta poderia ser um xml sim.

Em relação a validação com a utlização do Schema, eu tenho um caso parecido num projeto que mantenho chamado SetupMyProject. Dá uma olhada no código aqui => https://github.com/asouza/setupmyproject/blob/master/src/main/java/com/setupmyproject/infra/StringReaderXmlSource.java

Olá Alberto, Muito obrigado pela resposta. Continuo com uma dúvida em relação a validação: Levando em conta que o JAX-RS por padrão usa o JAXB e o marshall/unmarshall acontecem de forma transparente, em que momento a validação seria feita? Como eu intercepto o XML antes dele virar um objeto java para validá-lo? Abs

Acho que o melhor é o jeito explicado aqui nesse post do stackoverflow => http://stackoverflow.com/questions/3428273/validate-jaxbelement-in-jpa-jax-rs-web-service/3440388#3440388

Você precisa implementar o MessageBodyReader, dizer que aceita certo tipo de objeto e aí aplicar sua validação de schema contra o xml que está vindo :).