Как я могу генерировать объекты Java с аннотациями Bean Validation из XSD? - PullRequest
12 голосов
/ 04 ноября 2011

Я пишу EJB в качестве контрактной службы SOAP и генерирую Java-классы и SEI из WSDL.WSDL определяет несколько типов с ограничениями (максимальная длина, шаблон и т. Д.).Сгенерированные java-классы аннотированы JAXB, но в них отсутствуют метаданные ограничений, поскольку аннотации JAXB их не поддерживают.Это означает, что проверка входных данных происходит только тогда, когда служба вызывается через конечную точку SOAP.

Проблема заключается в в том, что, когда EJB-компонент вызывается другим EJB-компонентом, проверка обходится, поскольку она находится встек XML.Я хотел бы отключить проверку XML-схемы и использовать вместо нее проверку бинов, чтобы проверка работала для обоих способов (SOAP и RMI) вызова EJB.

Вопрос : Как я могу генерировать не только аннотации JAXBно также аннотации Bean Validation для классов Java?

Ответы [ 4 ]

6 голосов
/ 06 июня 2012

Вы можете использовать API javax.xml.valdation для проверки модели домена, сопоставленной с JAXB, со схемой XML. Преимущество этого подхода заключается в том, что вы используете одни и те же правила проверки (определенные в схеме 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);
    }

}

Полный пример

4 голосов
/ 08 ноября 2011

Лучший ответ, который я знаю до сих пор, - использовать плагин Annotate для добавления аннотаций JSR 303.

2 голосов
/ 29 ноября 2014

Вы можете использовать MOXy версии 2.6+ в качестве JAXB-провайдера, и это будет сделано автоматически.MOXy - это каркасный модуль в проекте EclipseLink.

На данный момент существует версия EclipseLink версии 2.6.0-M3 по адресу: sonatype или maven .

2 голосов
/ 21 февраля 2014

Вы можете создавать аннотации Bean Validation из xsd, используя этот плагин https://github.com/krasa/krasa-jaxb-tools

...