Gee*_*ing 12 java xml validation annotations jaxb
我正在编写一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
完整的例子