针对xsd /生成的对象

时间:2016-03-31 08:17:02

标签: java validation xsd jaxb jax-rs

我有一个应用程序,我从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,还是我必须验证该对象?在这种情况下,我该如何验证?

我知道这是一个新手问题,但我希望有人可以提供帮助。

1 个答案:

答案 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
      }
    });
相关问题