Ребята, я использую TomEE 1.6.0 (jax-rs) с пользовательским приложением:
@ApplicationPath("/rest")
public class Whatever extends Application {...}
Я делаю это, чтобы настроить базовый путь для моих служб REST и добавить собственного поставщика для каждой конечной точки этого приложения:
<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
<pojo-deployment class-name="Whatever">
<properties>
cxf.jaxrs.providers = WhateverProvider
</properties>
</pojo-deployment>
</openejb-jar>
У меня есть образец конечной точки JAX-RS, определенный следующим образом:
@Path("/whatever")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public class WhateverEndpoint {...}
Все работает нормально при развертывании в TomEE jax-rs (tomee-maven-plugin:start). Я могу вызывать свои службы на /rest/whatever
Проблема в том, что когда я хочу провести модульное тестирование этой службы с TomEE Embedded, WhateverEndpoint не развернут...
Конфигурация, которую я использую для настройки тестов (@BeforeClass), следующая:
Properties properties = new Properties();
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
context = EJBContainer.createEJBContainer(properties).getContext();
Я могу протестировать DAO и т. д., но не конечные точки... Когда я добавляю аннотацию @javax.ejb.* следующим образом:
@Singleton
@Path("/whatever")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public class WhateverEndpoint {...}
У меня есть кое-что получше в журналах:
INFO - Initializing network services
INFO - REST Application: http://127.0.0.1:4204/web -> org.apache.openejb.server.rest.InternalApplication
INFO - Service URI: http://127.0.0.1:4204/web/whatever -> EJB Whatever
INFO - GET http://127.0.0.1:4204/web/whatever/a -> A a(HttpServletRequest)
INFO - ** Bound Services **
INFO - NAME IP PORT
INFO - httpejbd 127.0.0.1 4204
INFO - admin 127.0.0.1 4200
INFO - ejbd 127.0.0.1 4201
INFO - ejbds 127.0.0.1 4203
Что я должен сделать, чтобы он правильно работал с моим пользовательским приложением JAX-RS, путем и поставщиком, точно так же, как TomEE JAX-RS, и без добавления аннотаций ejb? Должен ли я определять дополнительные свойства и какие из них при создании моего EJBContainer? Я вижу некоторые в примерах приложений:
- https://github.com/apache/tomee/blob/trunk/examples/rest-on-ejb
- https://github.com/apache/tomee/blob/trunk/examples/rest-example
Но ни один из них не работает.
Вот мой pom.xml:
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-embedded</artifactId>
<version>${tomee.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
<version>${openejb.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-jaxrs</artifactId>
<version>${tomee.version}</version>
<scope>test</scope>
</dependency>