Тестване на внедряване на уеб услуга с Arquillian: коренният контекст е нулев

Искам да разположа корпоративно приложение с фасада на уеб услуга в glassfish с Arquillian. Не съм много опитен в тази тема.

Изпращам кодовете на WebService и Interface с пояснения.

Внедряване на WebService:

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

Интерфейс:

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

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

А следните xml файлове са конфигурационни файлове на glassfish.

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
[#|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|#]
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>

Когато създам ear файл със ShrinkWrap и разположа, получавам следните редове в регистрационния файл на сървърите за регистрационни файлове, така че мисля, че част от внедряването беше успешно:

[#|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|#]

Но също така получавам следното изключение в 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 
....

Нямам .war файл за тази тестова настройка, как мога да посоча contextRoot за моята уеб услуга?


person cancomert    schedule 03.08.2013    source източник


Отговори (2)


След 8 години е хубаво да си спомня проблемите на моята магистърска теза... Доколкото си спомням, нямаше проблем с кода по-горе, но имаше грешка в старата версия на Arquillian.

След няколко седмици моят ръководител се върна от почивка и току-що актуализира версията Arquillian в родителския проект и тестовете започнаха да работят според очакванията.

person cancomert    schedule 05.07.2021

Ако нямате WAR (уеб приложение), теоретично няма да имате нужда от application.xml. Моето предложение, опитайте се да го изтриете.

Успешното внедряване на приложението в glassfish не означава, че то ще работи в Arquillian. Arquillian има някои проблеми с името на файла и контекстния корен (имах този проблем с WAR файл)

Обикновено се използва EAR, според документация на JavaEE 6 за свързване на WAR и EJB. Така че, на теория, ако нямате WAR, не се нуждаете точно от EAR. Можете да разположите EJB директно.

person Cladio Martins    schedule 07.12.2017
comment
Добре дошли в StackOverflow Cladio, трябва да редактирате споменаването си, че искате да коментирате, и крайната част за игнорирането ви. Вярвате, че вашите промени могат да отговорят на проблема му, което се квалифицира като заслужаващо отговор. Коментарите са за искане на разяснения. Например, ако сте попитали Опитахте ли да изтриете вашия application.xml, който би бил по-подходящ като коментар. Необходими са само няколко полезни отговора или въпроса, преди да можете да коментирате. - person Joey Harwood; 07.12.2017