javax.validation.ValidationException:已经在xml中配置了%class%

问题描述:

在项目的jar中有一个validation.xml包含了Address bean的字段级验证。javax.validation.ValidationException:已经在xml中配置了%class%

另一个项目使用Address类并需要进行特定的地址验证。因此,使用Address bean的类级验证创建了extended-validation.xml。

因此,在应用程序部署期间,ValidationException发生:javax.validation.ValidationException: my.base.datatypes.Address has already be configured in xml.

这里是两个带有基本验证和“扩展验证”的验证xml文件。

的validation.xml

<bean class="my.base.datatypes.Address" ignore-annotations="true"> 
    <getter name="country"> 
     <constraint annotation="my.imp.services.validation.ValidCode"> 
      <message>{msg01}</message> 
      <groups> 
       <value>my.imp.services.validation.ImportGroup</value> 
      </groups> 
      <element name="name">Country</element> 
     </constraint> 
    </getter> 
</bean> 

扩展的validation.xml

<bean class="my.base.datatypes.Address" ignore-annotations="true"> 
    <class ignore-annotations="true"> 
     <constraint annotation="my.extended.imp.services.validation.ValidAddress"> 
      <message>ERROR DURING ADDRESS VALIDATION</message> 
      <groups> 
       <value>my.imp.services.validation.ImportGroup</value> 
      </groups> 
     </constraint> 
    </class> 
</bean> 

是否有可能扩大现有的验证?

该解决方案看起来非常简单和微不足道。如果要扩展验证规则,请使用不同的验证程序,它将加载约束配置extended-validation.xml。在这种情况下,基础验证器根据validation.xml config验证数据,另一验证器根据extended-validation.xml config验证数据。所以不会再发生配置冲突。