Injecting Spring MVC Controller from .war included in the .ear into Arquillian test
kokovoj Sep 6, 2013 9:53 AMI have a large .ear that consists of multiple .jars and multiple .war files that I am deploying into JBoss. I want to do end-to-end testing on one of the .wars' Controllers using spring-test-mvc framework, and hence need mvc Controllers from that .war @Autowired into my Arquillium test class. The .war in question has a servlet named "myservlet" in its web.xml (<servlet-name>myservlet</servlet-name>, and that's what I am using in SpringWebConfiguration below. The .ear (including the .war that I need to test) gets successfully deployed to JBoss, however, the Controller class is never injected and hence remains null.
I am using arquillian-jbossas-managed-4.2.
My test class looks like this :
@SpringWebConfiguration(servletName = "myservlet")
@RunWith(Arquillian.class)
public class AqruilliumTest {
@Autowired
private MyController myController;
@Deployment
public static Archive createDeployment() {
// Create an Archive from the existing .ear build on the file system (not manually constructed in this method)
EnterpriseArchive ear = ShrinkWrap
.create( ZipImporter.class, "myLarge.ear" )
.importFrom( new File( "/Users/kokovoj/EarAndItsVariousComponents/An-Overall-EAR-folder/myLarge.ear" ) )
.as( EnterpriseArchive.class );
System.out.println( ear.toString( true ) );
return ear;
}
@Test
@RunAsClient
public void controllerInjected() throws Exception {
System.out.println( "--->>myController [" + myController + "]" );
assertNotNull( myController );
}
Questions :
1. Is there a requirement / assumption that when using @SpringWebConfiguration, @Deployment public static Archive createDeployment() method MUST return a WebArchive for spring injections to work ? I am returning an EnterpriseArchive so is that the reason it does NOT work for me; is there a workaround for making this work for .ear ?
2. In @Deployment public static Archive createDeployment() method I am not constructing the .ear manually, but rather using an existing .ear on the file system. Is there a requirement / assumption that archive must be constructed manually through code (and not use an existing archive from the file system) for spring injections to work ?