Подтвердить что ты не робот

Как я могу генерировать объекты Java с помощью Bean аннотаций проверки от XSD?

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

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

Вопрос. Как я могу генерировать не только аннотации JAXB, но и Bean аннотации проверки на классы Java?

4b9b3361

Ответ 2

Вы можете использовать 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);
    }

}

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

Ответ 3

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

Ответ 4

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

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