Тестирование развертывания веб-службы с помощью Arquillian: корневой контекст имеет значение null

Я хочу развернуть корпоративное приложение с фасадом веб-службы на стеклянной рыбе с помощью Arquillian. Я не очень опытен в этой теме.

Я отправляю коды WebService и Interface с аннотациями.

Реализация веб-сервиса:

@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.

приложение.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>

стеклянная рыба-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>

стеклянная рыба-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>

Когда я создаю файл уха с помощью 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