glassfishjboss-arquillian

Testing web service deployment with Arquillian: context root is null


I want to deploy an enterprise application with a web service facade to glassfish with Arquillian. I am not very experienced in this thema.

I send the WebService and Interface codes with annotiations.

WebService Implementation:

@Stateless
@WebService(endpointInterface = "ena.access.ticketsservices.facade.ITicketsRoleMappingsFacade")
@DeclareRoles({ "User", "Guest", "ProjectAdmin", "Admin" })
public class TicketsRoleMappingsFacade implements ITicketsRoleMappingsFacade {
 ...
}

Interface:

@WebService(name = "TicketsRoleMappingsFacade")
public interface ITicketsRoleMappingsFacade {

  @WebMethod
  @WebResult(name = "createProjectResult")
  public Project createProject(@WebParam(name = "createproject") Project project);          
}

And the following xml files are glassfish configuration files.

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application
    version="6"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd">

    <display-name>j2ee-ear</display-name>

    <module>
        <ejb>j2ee-ejb.jar</ejb>
    </module>

    <security-role>
        <role-name>User</role-name>        
    </security-role>
    <security-role>
        <role-name>Guest</role-name>        
    </security-role>
    <security-role>
        <role-name>ProjectAdmin</role-name>        
    </security-role>
    <security-role>
        <role-name>Admin</role-name>        
    </security-role>

    <library-directory>lib</library-directory>

</application>

glassfish-application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-application PUBLIC -//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN http://glassfish.org/dtds/glassfish-application_6_0-1.dtd>
<glassfish-application>

    <security-role-mapping>
        <role-name>User</role-name>
        <group-name>User</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>Guest</role-name>
        <group-name>Guest</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>ProjectAdmin</role-name>
        <group-name>ProjectAdmin</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>Admin</role-name>
        <group-name>Admin</group-name>
    </security-role-mapping>
    <realm>someRealm</realm>
</glassfish-application>

glassfish-ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC -//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd>
<glassfish-ejb-jar>

    <security-role-mapping>
        <role-name>User</role-name>
        <group-name>User</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>Guest</role-name>
        <group-name>Guest</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>ProjectAdmin</role-name>
        <group-name>ProjectAdmin</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>Admin</role-name>
        <group-name>Admin</group-name>
    </security-role-mapping>
    <enterprise-beans>
        <ejb>
            <ejb-name>TicketsRoleMappingsFacade</ejb-name>
            <webservice-endpoint>
                <port-component-name>TicketsRoleMappingsFacade</port-component-name>
                <port-component-uri>/TicketsRoleMappingsFacade</port-component-uri>
            </webservice-endpoint>
        </ejb>
    </enterprise-beans>

</glassfish-ejb-jar>

When I build ear file with ShrinkWrap and deploy get the following lines in log servers log, so I think a part of deployment was succesfull:

[#|2013-08-03T17:23:57.322+0200|INFO|glassfish3.1.1|javax.enterprise.webservices.org.glassfish.webservices|_ThreadID=17;_ThreadName=Thread-2;|WS00019: EJB Endpoint deployed j2ee-ear  listening at address at http://localhost:9999/TicketsRoleMappingsFacadeService/TicketsRoleMappingsFacade|#]

But I also get the following exception in Arquillian:

java.lang.IllegalArgumentException: contextRoot must not be null
    at org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet.<init>(Servlet.java:48)
    at org.jboss.arquillian.container.glassfish.clientutils.GlassFishClientService.resolveWebModuleSubComponents(GlassFishClientService.java:357)
    at org.jboss.arquillian.container.glassfish.clientutils.GlassFishClientService.doDeploy(GlassFishClientService.java:227)
    at org.jboss.arquillian.container.glassfish.CommonGlassFishManager.deploy(CommonGlassFishManager.java:101)
    at org.jboss.arquillian.container.glassfish.remote_3_1.GlassFishRestDeployableContainer.deploy(GlassFishRestDeployableContainer.java:71)
    at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$3.call(ContainerDeployController.java:161)
    at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$3.call(ContainerDeployController.java:128)
    at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.executeOperation(ContainerDeployController.java:271)
    at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.deploy(ContainerDeployController.java:127)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
    at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
    at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
    at 
....

I don't have any .war file for this test setup how can I specify the contextRoot for my web service?


Solution

  • After 8 years, it is nice to remember the problems of my master thesis... As far as I remember there was no problem with the code above, but there was a bug in the old Arquillian version.

    After a few weeks, my supervisor returned from holiday and just updated the Arquillian version in the parent project and tests started to work as expected.