我收到xml并通过jaxb将其转换为bean。我需要验证xml,我不想使用xsd或其他xml验证方法。我喜欢使用注释和bean验证方法。如何在java se环境中验证bean?但最好的解决方案是在jaxb框架中实现JSR 303验证
答案 0 :(得分:2)
<强>更新强>
我最初将问题解释为“如何使JAXB模式派生类JSR 303-validatable”。在讨论后出现OP有一个不同的问题。不过,我会留下我的答案,因为我认为通过关键字找到这个问题的其他人可能会有所帮助。
但这不是OP问题的答案,对此感到抱歉。
请参阅krasa-jaxb-tools
Jsr303Annotations
插件。
生成:
- 所有复杂类型的@Valid注释可以进一步限制为仅为定义的模式中的类型生成: -XJsr303Annotations:的targetNamespace = http://www.foo.com/bar
- @NotNull注释具有MinOccur值&gt; = 1的对象或具有所需用途的属性
- @Size表示包含minOccurs的列表&gt; 1
- @Size如果存在maxLength或minLength或长度限制
- @DecimalMax for maxInclusive restriction
- @DecimalMin for minInclusive restriction
- @DecimalMax for maxExclusive restriction,启用新参数(inclusive = false): - XJsr303Annotations:JSR_349 = true
- @DecimalMin for minExclusive restriction,启用新参数(inclusive = false): - XJsr303Annotations:JSR_349 = true
- @Digits,如果有totalDigits或fractionDigits限制。
- @Pattern如果存在模式限制
答案 1 :(得分:2)
我无法理解如何运行krasa-jaxb-tools,我找到了另一种解决方案。它是hibernate-validator 依赖关系:
<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
它不漂亮,但它是有效的
答案 2 :(得分:0)
我有类似的情况。 我在servlet容器(Tomcat 7)中使用Java 7,Jax-RS(cxf),Spring(核心)开发REST服务。 我没有持久层(它是基于Lucene / Solr的搜索后端),我没有使用任何托管环境(除了Spring的DI)。
我有一个pojo类(MyPojo),我创建了一个约束(MyPojoConstraint)及其底层验证器(MyPojoValidator)。
注意:pojo实例不是通过Spring创建的 注意:约束是类级别约束
所以,MyPojo就像是:
@MyPojoConstraint
public class MyPojo {
// members
// getters/setters
}
一开始,我认为将@MyPojoConstraint注释放到/ magic就足够了(即在创建类的实例时,验证将会完成)。
但什么都没发生。我尝试使用@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);
}
我现在的理解是:
如果有人能够证实我的理解,或者如果我错了,我会非常感激
由于
菲利普