gpt4 book ai didi

java - 如何从 XSD 生成带有 Bean Validation 注释的 Java 对象?

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:07 24 4
gpt4 key购买 nike

我正在编写一个 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);
}

}

完整示例

关于java - 如何从 XSD 生成带有 Bean Validation 注释的 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com