Tag: bean validation

我可以在ConstraintValidator中为Method参数更改属性路径吗?

如果您熟悉Beanvalidation框架,则您知道无法获取方法参数的名称。 因此,如果对方法的第一个参数执行@NotNull约束并且validation失败,则getPropertyPath将类似于“arg1”。 我想创建我自己的@NotNull版本,它可以取一个值,例如@NamedNotNull(“emailAddress”)。 但我无法弄清楚如何覆盖我的Validator中的#getPropertyPath? 有没有办法做到这一点,或者我坚持使用“arg1”或“arg2”等。 编辑 根据我收到的答案,我能够提出以下实现,允许我从@QueryParam或@PathParam注释中获取值,并将其用作Beanvalidation注释(如@NotNull)的属性路径。 对于Jersey,您需要创建以下类。 注意DefaultParameterNameProvider的实现: public class ValidationConfigurationContextResolver implements ContextResolver { @Override public ValidationConfig getContext( final Class type ) { final ValidationConfig config = new ValidationConfig(); config.parameterNameProvider( new RestAnnotationParameterNameProvider() ); return config; } static class RestAnnotationParameterNameProvider extends DefaultParameterNameProvider { @Override public List getParameterNames( Method method ) { Annotation[][] annotationsByParam = method.getParameterAnnotations(); […]

Hibernate @OneToOne @NotNull

在关系的两边声明@OneToOne和@NotNull是否有效,例如: class ChangeEntry { @OneToOne(cascade=CascadeType.ALL) @NotNull ChangeEntryDetails changeEntryDetails; public void addDetails(ChangeEntryDetails details) { this.changeEntryDetails = details; details.setChangeEntry(this); } } class ChangeEntryDetails { @OneToOne(cascase=CascadeType.ALL) @NotNull ChangeEntry changeEntry; public void setChangeEntry(ChangeEntry changeEntry) { this.changeEntry = changeEntry; } } 我找不到任何说这是无效的东西,但似乎在持久性过程中至少有一方必须违反。 (例如,如果首先编写changeEntry,则changeEntryDetails将暂时为null)。 尝试这个时,我看到抛出的exceptionnot-null property references a null or transient value 。 如果可能的话,我想避免放松约束,因为双方必须在场。

如何在JBoss 6.4中禁用javax.validation.api

类似的问题: 如何在JBoss EAP 6.4.0中使用beanvalidation1.1? 如何在jboss EAP 6.3上更改beanvalidation版本? 你能在JBoss EAP 6.4.4中使用beanvalidation1.1(JSR 349)吗? 如果我们可以在JBoss 6.x中使用Bean Validation 1.1,似乎存在一些不确定性。 我目前的jboss-deployment-structure.xml: <!—-> 我在.ear中捆绑了以下依赖项: javax.validation validation-api 1.1.0.Final org.hibernate hibernate-validator 5.2.2.Final 但我得到以下stacktrace: 14:09:44,085 WARN [org.jboss.resteasy.plugins.validation.hibernate.AbstractValidatorContextResolver] (AFP-HTTP-96) Unable to load Validation support: javax.validation.ValidationException: Unable to find provider: class org.hibernate.validator.HibernateValidator at javax.validation.Validation$ProviderSpecificBootstrapImpl.configure(Validation.java:223) [validation-api-1.0.0.GA-redhat-3.jar:1.0.0.GA-redhat-3] at org.jboss.resteasy.plugins.validation.hibernate.AbstractValidatorContextResolver.getGeneralValidator(AbstractValidatorContextResolver.java:40) [resteasy-hibernatevalidator-provider-3.0.9.Final.jar:] at org.jboss.resteasy.plugins.validation.hibernate.AbstractValidatorContextResolver.getContext(AbstractValidatorContextResolver.java:54) [resteasy-hibernatevalidator-provider-3.0.9.Final.jar:] at org.jboss.resteasy.plugins.validation.hibernate.ValidatorContextResolverCDI.getContext(ValidatorContextResolverCDI.java:16) [resteasy-hibernatevalidator-provider-3.0.9.Final.jar:] at org.jboss.resteasy.cdi.JaxrsInjectionTarget.validate(JaxrsInjectionTarget.java:113) […]

如何让Spring MVC在JUnit测试中调用validation?

我有一个名为Browser的POJO,我用Hibernate Validator注释进行了注释。 import org.hibernate.validator.constraints.NotEmpty; public class Browser { @NotEmpty private String userAgent; @NotEmpty private String browserName; … } 我编写了以下unit testing,试图validation我的Controller方法是否捕获了validation错误。 @Test public void testInvalidData() throws Exception { Browser browser = new Browser(“opera”, null); MockHttpServletRequest request = new MockHttpServletRequest(); BindingResult errors = new DataBinder(browser).getBindingResult(); // controller is initialized in @Before method controller.add(browser, errors, request); assertEquals(1, errors.getErrorCount()); […]

在JSF中使用beanvalidation进行本地化

我使用JSF 2.0和RichFaces 4创建了一个基于MVC的网站。每个输入文本validation都是使用beanvalidation注释完成的。 我使用Hibernate Validator作为beanvalidation实现。 如何显示本地化消息? 如果我使用 @NotNull(message=””) 然后它直接显示作为消息。 这是怎么造成的,如何解决?

Hibernate – 激活Bean Validation集成时出错

我正在尝试设置Hibernate。 但是当我尝试使用以下代码创建会话工厂时: Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); 我收到错误: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:156) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:303) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) […]

Hibernatevalidation失败时出现意外的UnsupportedOperationException

为什么我在validation失败时从Hibernate获得UnsupportedOperationException? 我希望有一个ConstraintViolationException。 下面是我的DAO。 当它通过validation时,它工作正常。 我正在使用Hibernate和Hibernate Validator 4.我正在使用Websphere 8.0。 我认为WebSphereExtendedJtaPlatform是罪魁祸首,但我不知道为什么。 如果我看一下所谓的WebSphereExtendedJtaPlatform的源代码(跟随源代码的链接),看起来大多数方法只会抛出UnsupportedOperationException。 http://grepcode.com/file/repo1.maven.org/maven2/org.hibernate/hibernate-core/4.0.0.CR1/org/hibernate/service/jta/platform/internal/WebSphereExtendedJtaPlatform.java 这是我的堆栈跟踪: org.hibernate.AssertionFailure HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: null id in com.westfieldgrp.beanvalidation.persistence.Car entry (don’t flush the Session after an exception occurs) [11/14/12 16:48:48:785 EST] 00000020 RegisteredSyn […]

使用Java EE 6 Beanvalidation

我正在尝试使用此处指定的Java EE 6validation http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html 我注释了一个简单的字段 @Max(11) @Min(3) private int numAllowed; 文档说“对于内置约束,可以使用默认实现”但是如何指定它。 我的约束检查没有开始。我希望它能够调用字段的setter方法。 我class上唯一的import是 import javax.validation.constraints.Max; import javax.validation.constraints.Min; 如何/在何处指定实施? 我将约束放在一个简单的POJO而不是@Entity类的字段上,这样可以吗?

如何为List创建ConstraintValidator

我有一个简单的validation器来validationString值是预定义列表的一部分: public class CoBoundedStringConstraints implements ConstraintValidator { private List m_boundedTo; @Override public void initialize(CoBoundedString annotation) { m_boundedTo = FunctorUtils.transform(annotation.value(), new ToLowerCase()); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null ) { return true; } context.disableDefaultConstraintViolation(); context.buildConstraintViolationWithTemplate(“should be one of ” + m_boundedTo).addConstraintViolation(); return m_boundedTo.contains(value.toLowerCase()); } } 例如,它将validation: @CoBoundedString({“a”,”b” }) public […]

Autowired Repository在Custom Constraint Validator中为空

我有一个基于Spring的webapp。 我在我的控制器中使用了几个带注释@Repository,@ Transaction的存储库类。 那部分工作正常。 我创建了一个Custom Constraint Validator,它必须访问存储库。 现在我无法理解为什么Repository为null。 我尝试使用@Component注释来注释validation器。 我的基本包包含所有这些类是在xml的一部分。 那么我还应该做些什么来确保存储库dependency injection工作。 这就是我的Constraintvalidation器的样子。 public class DonorTypeExistsConstraintValidator implements ConstraintValidator { @Autowired private DonorTypeRepository donorTypeRepository; @Override public void initialize(DonorTypeExists constraint) { } public boolean isValid(DonorType target, ConstraintValidatorContext context) { System.out.println(“donorType: ” + target); if (target == null) return true; try { if (donorTypeRepository.isDonorTypeValid(target.getDonorType())) return true; } catch […]