Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@
import javax.validation.ValidationProviderResolver;
import javax.validation.ValidatorFactory;
import javax.validation.executable.ExecutableValidator;
import javax.validation.spi.ValidationProvider;

import org.apache.cxf.common.logging.LogUtils;

public class BeanValidationProvider {
private static final Logger LOG = LogUtils.getL7dLogger(BeanValidationProvider.class);

private final ValidatorFactory factory;
private ClassLoader validateContextClassloader;


public BeanValidationProvider() {
try {
factory = Validation.buildDefaultValidatorFactory();
Expand Down Expand Up @@ -76,15 +76,15 @@ public BeanValidationProvider(ValidationProviderResolver resolver) {
this(resolver, null);
}

public <T extends Configuration<T>> BeanValidationProvider(
public <T extends Configuration<T>, U extends ValidationProvider<T>> BeanValidationProvider(
ValidationProviderResolver resolver,
Class<javax.validation.spi.ValidationProvider<T>> providerType) {
Class<U> providerType) {
this(resolver, providerType, null);
}

public <T extends Configuration<T>> BeanValidationProvider(
public <T extends Configuration<T>, U extends ValidationProvider<T>> BeanValidationProvider(
ValidationProviderResolver resolver,
Class<javax.validation.spi.ValidationProvider<T>> providerType,
Class<U> providerType,
ValidationConfiguration cfg) {
try {
Configuration<?> factoryCfg = providerType != null
Expand All @@ -98,14 +98,6 @@ public <T extends Configuration<T>> BeanValidationProvider(
}
}

public ClassLoader getValidateContextClassloader() {
return validateContextClassloader;
}

public void setValidateContextClassloader(ClassLoader validateContextClassloader) {
this.validateContextClassloader = validateContextClassloader;
}

private static void initFactoryConfig(Configuration<?> factoryCfg, ValidationConfiguration cfg) {
if (cfg != null) {
factoryCfg.parameterNameProvider(cfg.getParameterNameProvider());
Expand Down Expand Up @@ -154,16 +146,7 @@ public< T > void validateBean(final T bean) {
}

private< T > Set<ConstraintViolation< T > > doValidateBean(final T bean) {
ClassLoader oldTccl = Thread.currentThread().getContextClassLoader();
try {
// In OSGi, hibernate's hunt for an EL provided can fail without this.
if (validateContextClassloader != null) {
Thread.currentThread().setContextClassLoader(validateContextClassloader);
}
return factory.getValidator().validate(bean);
} finally {
Thread.currentThread().setContextClassLoader(oldTccl);
}
return factory.getValidator().validate(bean);
}

private ExecutableValidator getExecutableValidator() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@


import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import javax.validation.ValidationProviderResolver;
import javax.validation.spi.ValidationProvider;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
Expand Down Expand Up @@ -97,19 +99,17 @@ public Response updateBook(@PathParam("id") Long id, Book book) {
@Path("/books-validate")
public Response createBookValidate(Book book) {
assertInjections();
BeanValidationProvider prov;
ClassLoader oldtccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(HibernateValidator.class.getClassLoader());
HibernateValidatorConfiguration configuration =
Validation.byProvider(HibernateValidator.class)
.configure();
ValidatorFactory factory = configuration.buildValidatorFactory();
prov = new BeanValidationProvider(factory);
} finally {
Thread.currentThread().setContextClassLoader(oldtccl);
}
prov.setValidateContextClassloader(getClass().getClassLoader());

BeanValidationProvider prov = new BeanValidationProvider(
new ValidationProviderResolver() {
@Override
public List<ValidationProvider<?>> getValidationProviders() {
ValidationProvider<HibernateValidatorConfiguration> prov = new HibernateValidator();
List<ValidationProvider<?>> provs = new ArrayList<>();
provs.add(prov);
return provs;
}
}, HibernateValidator.class);
try {
prov.validateBean(book);
} catch (ConstraintViolationException cve) {
Expand All @@ -118,8 +118,8 @@ public Response createBookValidate(Book book) {
violationMessages.append(constraintViolation.getPropertyPath())
.append(": ").append(constraintViolation.getMessage()).append("\n");
}
return Response.status(Response.Status.BAD_REQUEST).type("text/plain")
.entity(violationMessages.toString()).build();
return Response.status(Response.Status.BAD_REQUEST)
.type("text/plain").entity(violationMessages.toString()).build();
}
return createBook(book);
}
Expand Down
7 changes: 1 addition & 6 deletions osgi/karaf/features/src/main/resources/features.xml
Original file line number Diff line number Diff line change
Expand Up @@ -443,10 +443,7 @@
<feature name="cxf-bean-validation-core" version="${project.version}" resolver="(obr)">
<!-- This feature has the wrong name; it's hibernate-only. Fix up in 3.2.0? Move all this to the
hibernate-bean-validation-helper feature -->
<bundle start-level="10" dependency="true">mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jsr303-api-${cxf.osgi.validation.api.version}/${cxf.servicemix.specs.version}</bundle>
<bundle start-level="30" dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.hibernate-validator/${cxf.hibernate-validator.bundle.version}</bundle>
<!-- The hibernate bundle demands 1.1.0 of javax.validator, but servicemix only provides 1.0.0. So
we add in the API bundle and hope that the split-package declaration in servicemix does the job. -->
<bundle start-level="30" dependency="true">mvn:org.hibernate/hibernate-validator/${cxf.hibernate.validator.version}</bundle>
<bundle start-level="30" dependency="true">mvn:javax.validation/validation-api/${cxf.validation.api.version}</bundle>
<!-- The servicemix bundle for hibernate demands joda-time -->
<bundle start-level="30" dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.joda-time/${cxf.servicemix.jodatime.version}</bundle>
Expand All @@ -464,8 +461,6 @@
<bundle start-level="30" dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aspectj/${cxf.servicemix.aspectj.version}</bundle>
</feature>



<feature name="cxf-bean-validation" version="${project.version}" resolver="(obr)">
<feature version="${project.version}">cxf-bean-validation-core</feature>
<bundle start-level="30" dependency="true">mvn:javax.el/javax.el-api/${cxf.javax.el.version}</bundle>
Expand Down
6 changes: 3 additions & 3 deletions parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,11 @@
<cxf.cdi.api.version>1.1</cxf.cdi.api.version>
<cxf.json.api.version>1.0</cxf.json.api.version>
<cxf.jboss.weld.version>2.1.2.Final</cxf.jboss.weld.version>
<cxf.jboss.logging.version>3.1.3.GA</cxf.jboss.logging.version>
<cxf.jboss.logging.version>3.3.0.Final</cxf.jboss.logging.version>
<cxf.osgi.validation.api.version>1.1.0</cxf.osgi.validation.api.version>
<cxf.hibernate.validator.version>5.0.2.Final</cxf.hibernate.validator.version>
<cxf.hibernate.validator.version>5.2.2.Final</cxf.hibernate.validator.version>
<cxf.glassfish.json.version>1.0.4</cxf.glassfish.json.version>
<cxf.javax.el.version>3.0.0</cxf.javax.el.version>
<cxf.hibernate-validator.bundle.version>5.0.2.Final_1</cxf.hibernate-validator.bundle.version>
<!-- various OSGi related versions -->
<cxf.aries.version>1.0.0</cxf.aries.version>
<cxf.aries.parser.version>1.3.1</cxf.aries.parser.version>
Expand Down Expand Up @@ -589,6 +588,7 @@
</Export-Service>
<Bundle-Activator>${cxf.bundle.activator}</Bundle-Activator>
</instructions>
<niceManifest>true</niceManifest>
</configuration>
</plugin>
</plugins>
Expand Down