2014-11-14 72 views
4

我收到xml并通过jaxb将其转换为bean。我需要验证xml,我不想使用xsd或其他xml验证方法。我喜欢使用注释和bean验证方法。我如何在java se环境中验证bean?但是,最好的解决办法是在JAXB框架JSR 303在java SE或jaxb中的Bean验证

回答

2

更新

我最初解释了一个问题,“我怎么做JAXB模式派生类JSR 303,可验证”实现JSR 303的验证。在讨论后,OP出现了另一个问题。不过,我会留下我的答案,因为我认为这可能对通过关键字查找此问题的其他人有帮助。

但这不是OP问题的答案,对此抱歉。


请参阅krasa-jaxb-toolsJsr303Annotations插件。

生成:

  • 所有复杂类型@Valid注释,可以进一步限制为仅生成用于从定义的模式类型: -XJsr303Annotations:的targetNamespace =为对象http://www.foo.com/bar
  • @NotNull注解具有MinOccur值> = 1或对于具有所需使用的属性
  • @Size对于列表具有minOccurs> 1
  • @Size如果存在我SA最大长度或的minLength或长度限制
  • @DecimalMax用于限制maxInclusive,便会
  • @DecimalMin为minInclusive限制
  • @DecimalMax为maxExclusive限制,使新的参数(含=假)其中:-XJsr303Annotations:JSR_349 =真
  • @DecimalMin for minExclusive限制,启用新参数(包含= false):-XJsr303Annotations:JSR_349 = true
  • @Digits是否存在totalDigits或fractionDigits限制。
  • @Pattern如果是有规律的限制
1

我不能明白,我怎么可以运行krasa,JAXB的工具,我找到了另一种解决方案。这是休眠,验证 依赖性:

<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>javax.el-api</artifactId> 
     <version>2.2.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.web</groupId> 
     <artifactId>javax.el</artifactId> 
     <version>2.2.4</version> 
    </dependency> 

和Java代码:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 
x = validator.validate(bean).size(); // x=0 good; x!=0 bad 

它不漂亮,但它的工作原理

+1

您的Java类是否已经有JSR 303注释? – lexicore 2014-11-14 16:20:04

+0

@lexicore是的,当然 – user1182583 2014-11-15 13:00:50

+0

好的,那就是另外一回事了。这并不明显,对不起。 – lexicore 2014-11-15 15:48:12

0

我有类似的情况。 我使用Java 7,Jax-RS(cxf),Spring(核心),在servlet容器(Tomcat 7)中开发REST服务。 我没有持久层(它是基于Lucene/Solr的搜索后端),我没有使用任何托管环境(除了Spring的DI)。

我有一个pojo类(MyPojo),我创建了一个约束(MyPojoConstraint)及其底层验证器(MyPojoValidator)。

注意:不是通过Spring 注创建的POJO实例:约束是一个类级别的约束

所以,MyPojo是成才这样的:

@MyPojoConstraint 
public class MyPojo { 

// members 

// getters/setters 
} 

在开始的时候,我以为把@MyPojoConstraint注释将是足够的/魔术的(即创建类的实例时,验证将完成)。

但是什么也没有发生。我试着使用@Valid注解,在构造函数中使用它。但它没有奏效。

我结束了书面方式这样的代码:

MyPojo p = new MyPojo(....); 

// Proceed to validation 
ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 
Set<ConstraintViolation<SuggestMRRequestParameters>> constraintViolations = validator.validate(p); 
if(constraintViolations.size() > 0){ 
      throw new ConstraintViolationException(constraintViolations); 
} 

我的理解现在是:

    如果你有“管理豆”(通过Spring或实体管理器),其 生命周期
  • 如果只有pojo /非托管bean,则必须以编程方式执行验证程序:in so我而言,我想AOP可能是有用的做到这一点,避免写太多的样板代码

,我将不胜感激,如果有人可以证实我的理解或纠正我,如果我错了

感谢

Philippe