/* * Hibernate Validator, declare and validate application constraints * * License: Apache License, Version 2.0 * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>. */ package org.hibernate.validator.integration.wildfly.xml; import static org.assertj.core.api.Assertions.assertThat; import java.util.Set; import javax.inject.Inject; import javax.validation.ConstraintViolation; import javax.validation.Validator; import javax.validation.constraints.NotNull; import org.hibernate.validator.integration.AbstractArquillianIT; import org.jboss.arquillian.container.test.api.Deployer; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.asset.Asset; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.descriptor.api.Descriptors; import org.jboss.shrinkwrap.descriptor.api.validationConfiguration11.ValidationConfigurationDescriptor; import org.jboss.shrinkwrap.descriptor.api.validationMapping11.ValidationMappingDescriptor; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.testng.annotations.Test; /** * Test for https://hibernate.atlassian.net/browse/HV-1280. To reproduce the issue, the deployment must be done twice * (it will only show up during the 2nd deploy), which is why the test is managing the deployment itself via client-side * test methods. * * @author Gunnar Morling */ public class JaxpContainedInDeploymentIT extends AbstractArquillianIT { private static final String WAR_FILE_NAME = JaxpContainedInDeploymentIT.class.getSimpleName() + ".war"; @ArquillianResource private Deployer deployer; @Inject private Validator validator; @Deployment(name = "jaxpit", managed = false) public static Archive<?> createTestArchive() { return buildTestArchive( WAR_FILE_NAME ) .addClass( Camera.class ) .addAsResource( validationXml(), "META-INF/validation.xml" ) .addAsResource( mappingXml(), "META-INF/my-mapping.xml" ) .addAsLibrary( Maven.resolver().resolve( "xerces:xercesImpl:2.9.1" ).withoutTransitivity().asSingleFile() ) .addAsWebInfResource( EmptyAsset.INSTANCE, "beans.xml" ); } private static Asset validationXml() { String validationXml = Descriptors.create( ValidationConfigurationDescriptor.class ) .version( "1.1" ) .constraintMapping( "META-INF/my-mapping.xml" ) .exportAsString(); return new StringAsset( validationXml ); } private static Asset mappingXml() { String mappingXml = Descriptors.create( ValidationMappingDescriptor.class ) .version( "1.1" ) .createBean() .clazz( Camera.class.getName() ) .createField() .name( "brand" ) .createConstraint() .annotation( "javax.validation.constraints.NotNull" ) .up() .up() .up() .exportAsString(); return new StringAsset( mappingXml ); } @Test @RunAsClient public void deploy1() throws Exception { deployer.deploy( "jaxpit" ); } @Test(dependsOnMethods = "deploy1") public void test1() throws Exception { doTest(); } @Test(dependsOnMethods = "test1") @RunAsClient public void undeploy1() throws Exception { deployer.undeploy( "jaxpit" ); } @Test(dependsOnMethods = "undeploy1") @RunAsClient public void deploy2() throws Exception { deployer.deploy( "jaxpit" ); } @Test(dependsOnMethods = "deploy2") public void test2() throws Exception { doTest(); } @Test(dependsOnMethods = "test2") @RunAsClient public void undeploy2() throws Exception { deployer.undeploy( "jaxpit" ); } private void doTest() { Set<ConstraintViolation<Camera>> violations = validator.validate( new Camera() ); assertThat( violations ).hasSize( 1 ); assertThat( violations.iterator() .next() .getConstraintDescriptor() .getAnnotation() .annotationType() ).isSameAs( NotNull.class ); } }