2016-10-04 2 views
2

Использование краса-JAXB-инструменты JAXB-плагин, я сгенерировал следующее:
Java проверки боб против проверки XSD для @ Pattern.List

из XSD-схемы:

<xs:simpleType name="SomethingId"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="small\.123[A-Za-z0-9\.]{0,27}"/> 
     <xs:pattern value="SMALL\.123[A-Za-z0-9\.]{0,27}"/> 
    </xs:restriction> 
</xs:simpleType> 

Я получил аннотированный элемент:

@XmlElement(name = "SomethingId", required = true) 
    @NotNull 
    @Pattern.List({ 
    @Pattern(regexp = "small\\.123[A-Za-z0-9\\.]{0,27}"), 
    @Pattern(regexp = "SMALL\\.123[A-Za-z0-9\\.]{0,27}") 
}) 
protected String somethingId; 

По умолчанию валидатор (поставщик Apache):

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
     this.validator = factory.getValidator(); 

Используя JAXB, я успешно подготовил действительный XML (который проходит проверку XSD, включая формат вышеупомянутой строки).
Но если я попытаюсь проверить строку, как указано выше, используя проверку Bean, она выдает ошибку - если она написана «small123», она говорит, что она должна быть заглавной (с ошибкой SMALL.123 [A-Za-z0-9.] {0 , 27} regex) и наоборот.

Вывод состоит в том, что проверка XSD рассматривает список шаблонов, как если бы подразумевалось логическое ИЛИ, а проверка валида обрабатывает их как логические И.

Поскольку это событие произошло только один раз в моем коде, мне удалось исправить его (быстро и грязно), но мне было интересно, есть ли лучший способ.

Это проблема с плагином (который генерирует неправильные аннотации), с помощью валидатора или чего-то еще (чего я не замечаю)?

ответ

1

Да Проблема с плагином.

посмотреть здесь https://github.com/krasa/krasa-jaxb-tools/issues/41 (фиксированная и объединены в 1.5) и здесь https://github.com/krasa/krasa-jaxb-tools/issues/54

Если вы не используете 1.5, возможно обновление исправляет проблему. В других случаях вам нужно дождаться слияния и выпуска проблемы 54 или применить это исправление в своем локальном репо.