Как проверить коллекцию аннотированных объектов в XML

Я просматривал это сообщение об использовании JSR-303 для проверки набора объектов. Решение отлично работает с аннотациями, но я не могу заставить его работать с конфигурацией в формате XML Hibernate Validator.

Например, у меня есть код, подобный этому:

public class DataSet
{
    Collection<Data> dataCollection;
    public Collection<Data> getDataCollection() {...}
}

Оттуда у меня есть собственный валидатор/аннотация DataValidator/@ValidData.

В XML я делаю это первым:

<bean class="DataSet"
    ignore-annotations="true">
    <field name="dataCollection">
        <valid/>
        <constraint annotation="ValidData"/>
    </field>
</bean>

Однако я получаю следующее исключение:

Exception in thread "main" javax.validation.UnexpectedTypeException: No validator could be found for type: java.util.Collection<DataSet>

Поэтому я заменяю тег <valid> тегом <constraint> в XML. Кажется, это недопустимо для схемы XSD, и XML больше нельзя анализировать.

<bean class="DataSet"
    ignore-annotations="true">
    <field name="dataCollection">
        <constraint annotation="ValidData"/>
        <valid/>
    </field>
</bean>

Exception in thread "main" javax.validation.ValidationException: Error parsing mapping file.

Кто-нибудь знает, как я могу использовать XML для проверки этой коллекции с помощью специального валидатора?


person jeffmaher    schedule 21.05.2012    source источник
comment
Основываясь на первом исключении, я бы сказал, что нет валидатора ограничений для @ValidData для типа Collection. Какие валидаторы у вас есть для этого ограничения?   -  person Gunnar    schedule 21.05.2012
comment
Например, @ValidData можно считать пользовательской аннотацией ограничения. DataValidator будет настраиваемым валидатором, связанным через аннотацию.   -  person jeffmaher    schedule 21.05.2012


Ответы (1)


Ключевым моментом было добавление аннотации ограничения уровня класса в XML к самому Data POJO.

<bean class="DataSet"
    ignore-annotations="true">
    <field name="dataCollection">
        <valid/>
    </field>
</bean>

<bean class="Data" ignore-annotations="true">
     <class>
          <constraint annotation="ValidData"/>
     </class>
</bean>
person jeffmaher    schedule 22.05.2012