我有一个应用程序,我从xsd架构生成Java类。我还使用jax-rs进行休息服务。我需要验证POST方法的输入,以确保符合xsd架构中设置的规则。
@POST
@Path("/person/add")
public void addPerson(Person person) {
//Need to validate Person object
daoManager.addPersonToDB(person);
}
Person对象是从xsd生成的类。我可以假设该对象符合xsd,还是我必须验证该对象?在这种情况下,我该如何验证?
我知道这是一个新手问题,但我希望有人可以提供帮助。
答案 0 :(得分:2)
我没有尝试过自己,但我认为以下代码可行。
JAXBContext context = JAXBContext.newInstance(Person.class);
Marshaller marshaller = context.createMarshaller();
根据您的命名空间,使用
marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "yourXSD.xsd");
或
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "yourXSD.xsd");
然后封送人员实例,如果没有异常,则表示人员实例正常。否则,它不是。
哦,我忘记了事情。在你编组之前,请记住setSchema()
SchemaFactory sf = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("your.xsd"));
marshaller.setSchema(schema);
marshaller.setEventHandler(new ValidationEventHandler() {
public boolean handleEvent(ValidationEvent event) {
System.out.println(event);
return false; //to stop the marshal if anything happened
}
});