簡體   English   中英

如何使用XSD中的Bean Validation注釋生成Java對象?

[英]How can I generate Java objects with Bean Validation annotations from an XSD?

我正在編寫一個EJB作為契約第一個SOAP服務,我從WSDL生成java類和SEI。 WSDL指定了幾種帶約束的類型(最大長度,模式等)。 生成的java類是JAXB注釋但缺少約束元數據,因為JAXB注釋不支持這些。 這意味着只有在通過SOAP端點調用服務時才會發生輸入驗證。

問題是 ,當EJB被另一個EJB調用時,驗證被繞過,因為它位於XML堆棧中。 我想禁用XML Schemavalidation並使用Bean Validation,因此驗證適用於調用EJB的兩種方式(SOAP和RMI)。

問題 :如何在Java類上生成JAXB注釋以及Bean Validation注釋?

您可以使用javax.xml.valdation API來驗證針對XML模式使用JAXB映射的域模型。 此方法的一個優點是您對兩個用例使用相同的驗證規則(在XML模式中定義):

import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.util.JAXBSource;
import javax.xml.validation.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        Customer customer = new Customer();
        customer.setName("Jane Doe");
        customer.getPhoneNumbers().add(new PhoneNumber());
        customer.getPhoneNumbers().add(new PhoneNumber());
        customer.getPhoneNumbers().add(new PhoneNumber());

        JAXBContext jc = JAXBContext.newInstance(Customer.class);
        JAXBSource source = new JAXBSource(jc, customer);

        SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = sf.newSchema(new File("customer.xsd"));

        Validator validator = schema.newValidator();
        validator.setErrorHandler(new MyErrorHandler());
        validator.validate(source);
    }

}

完整的例子

我所知道的最佳答案是使用Annotate插件添加JSR 303注釋。

您可以使用此插件從xsd生成Bean Validation注釋https://github.com/krasa/krasa-jaxb-tools

您可以使用MOXy 2.6+作為JAXB提供程序,這將自動完成。 MOXy是EclipseLink項目中的框架模塊。

目前,有一個版本2.6.0-M3的EclipseLink可用於: sonatypemaven

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM