Skip to content

Commit

Permalink
[RESTEASY-2549] Remove resteasy-validator-provider source dependency …
Browse files Browse the repository at this point in the history
…on Hibernate Validate.

[RESTEASY-2549] Moved NonCDIValidatorFactoryTest to integration-tests-embedded
  • Loading branch information
ronsigal authored and asoldano committed Sep 18, 2020
1 parent dab59c4 commit ebba718
Show file tree
Hide file tree
Showing 10 changed files with 188 additions and 284 deletions.
5 changes: 5 additions & 0 deletions arquillian/RESTEASY-1056-jetty-bv11/pom.xml
Expand Up @@ -97,6 +97,11 @@
<artifactId>resteasy-validator-provider</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.el</groupId>
<artifactId>jboss-el-api_3.0_spec</artifactId>
Expand Down
Expand Up @@ -126,6 +126,11 @@
<artifactId>resteasy-validator-provider</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.el</groupId>
<artifactId>jboss-el-api_3.0_spec</artifactId>
Expand Down
22 changes: 21 additions & 1 deletion docbook/reference/en/en-US/modules/Validation.xml
Expand Up @@ -5,7 +5,7 @@
RESTEasy provides the support for validation mandated by the
<ulink url="http://www.jcp.org/en/jsr/detail?id=339">JAX-RS: Java API for RESTful Web Services 2.1 </ulink>,
given the presence of an implementation of the
<ulink url="http://beanvalidation.org/1.1/spec/">Bean Validation specification</ulink>
<ulink url="https://beanvalidation.org/2.0/spec/">Bean Validation specification</ulink>
such as <ulink url="http://hibernate.org/validator/">Hibernate Validator</ulink>.
</para>

Expand Down Expand Up @@ -473,4 +473,24 @@ public interface GeneralValidatorCDI extends GeneralValidator
The validator in resteasy-validator-provider implements GeneralValidatorCDI.
</para>
</section>

<section>
<title>Validation Implementations</title>

<para>
As mentioned above, RESTEasy validation requires an implementation of the
<ulink url="https://beanvalidation.org/2.0/spec/">Bean Validation specification</ulink>
such as <ulink url="http://hibernate.org/validator/">Hibernate Validator</ulink>. Hibernate
Validator is supplied automatically when RESTEasy is running in the context of WildFly. Otherwise,
it should be made available. For example, in maven

<programlisting>
&lt;dependency&gt;
&lt;groupId&gt;org.hibernate.validator&lt;/groupId&gt;
&lt;artifactId&gt;hibernate-validator/artifactId&gt;
&lt;/dependency&gt;
</programlisting>
</para>
</section>

</chapter>
5 changes: 0 additions & 5 deletions providers/resteasy-validator-provider/pom.xml
Expand Up @@ -45,11 +45,6 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
Expand Up @@ -12,8 +12,6 @@
import javax.validation.ValidatorFactory;
import javax.validation.executable.ExecutableType;

import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.HibernateValidatorConfiguration;
import org.jboss.resteasy.plugins.validation.i18n.LogMessages;
import org.jboss.resteasy.plugins.validation.i18n.Messages;
import org.jboss.resteasy.spi.validation.GeneralValidatorCDI;
Expand Down Expand Up @@ -56,7 +54,7 @@ ValidatorFactory getValidatorFactory()
catch (NamingException e)
{
LogMessages.LOGGER.info(Messages.MESSAGES.usingValidatorFactoryDoesNotSupportCDI());
HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure();
Configuration<?> config = Validation.byDefaultProvider().configure();
validatorFactory = tmpValidatorFactory = config.buildValidatorFactory();
}
}
Expand Down
Expand Up @@ -7,6 +7,7 @@
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
Expand All @@ -25,6 +26,7 @@
import javax.validation.executable.ExecutableType;
import javax.validation.executable.ValidateOnExecution;

import org.jboss.resteasy.api.validation.ConstraintType;
import org.jboss.resteasy.api.validation.ConstraintType.Type;
import org.jboss.resteasy.api.validation.ResteasyConstraintViolation;
import org.jboss.resteasy.api.validation.ResteasyViolationException;
Expand Down Expand Up @@ -67,6 +69,7 @@ public class GeneralValidatorImpl implements GeneralValidatorCDI
private ExecutableType[] defaultValidatedExecutableTypes;
private boolean suppressPath;
private boolean cdiActive;
private static ConstraintTypeUtilImpl util = new ConstraintTypeUtilImpl();

public GeneralValidatorImpl(final ValidatorFactory validatorFactory, final boolean isExecutableValidationEnabled, final Set<ExecutableType> defaultValidatedExecutableTypes)
{
Expand Down Expand Up @@ -101,20 +104,23 @@ public void validate(HttpRequest request, Object object, Class<?>... groups)
{
Validator validator = getValidator(request);
Set<ConstraintViolation<Object>> cvs = null;
SimpleViolationsContainer violationsContainer = getViolationsContainer(request, object);
if (alreadyFoundClassOrPropertyConstraint(violationsContainer))
{
return;
}

try
{
cvs = validator.validate(object, groups);
}
catch (Exception e)
{
SimpleViolationsContainer violationsContainer = getViolationsContainer(request, object);
violationsContainer.setException(e);
violationsContainer.setFieldsValidated(true);
throw toValidationException(e, violationsContainer);
}

SimpleViolationsContainer violationsContainer = getViolationsContainer(request, object);
violationsContainer.addViolations(cvs);
violationsContainer.setFieldsValidated(true);
}
Expand Down Expand Up @@ -821,4 +827,23 @@ private static boolean isAnnotationPresent(Class<?> clazz, String name)
}
return false;
}

private static boolean alreadyFoundClassOrPropertyConstraint(SimpleViolationsContainer container)
{
Set<ConstraintViolation<Object>> set = container.getViolations();
if (set.isEmpty())
{
return false;
}
Iterator<ConstraintViolation<Object>> it = set.iterator();
for (ConstraintViolation<?> cv = it.next(); it.hasNext(); cv = it.next())
{
ConstraintType.Type type = util.getConstraintType(cv);
if ((ConstraintType.Type.CLASS.equals(type) || ConstraintType.Type.PROPERTY.equals(type)))
{
return true;
}
}
return false;
}
}

0 comments on commit ebba718

Please sign in to comment.