2013-12-20 8 views
4

I ребята, Я использую TomEE 1.6.0 (JAX-RS) с настраиваемым Применением:TomEE встроенных и развертывание приложений на заказ 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 {...} 

Все работает нормально при развертывании в Tomice jax-rs (tomee-maven-plugin: начало). я могу назвать свои услуги по /отдыху/все

Проблема заключается в том, когда я хочу модульное тестирование этого сервиса с TomEE Embedded, WhateverEndpoint не развертывается ...

Конфигурации я использую для установка тестов (@BeforeClass) заключается в следующем:

Properties properties = new Properties(); 
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true"); 
context = EJBContainer.createEJBContainer(properties).getContext(); 

я могу проверить DAO и так далее, но не Endpoints ... Когда я добавляю @ 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-приложение Path и поставщика, так же, как TomEE JAX-RS делать и не добавлять аннотации ejb? Должен ли я определять дополнительные свойства и какой при создании моего EJBC-контентера? Я вижу некоторые в приложениях выборки:

Но никто из них не работают.

Вот мой 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> 
+0

Переопределение openejb.cxf.jax-rs.providers, похоже, не работает – avianey

ответ

1

, наконец, решить, добавив свойство EJBContainer.APP_NAME к свойствам, передаваемых при создании встроенного контейнера:

+0

Лучше поздно, чем никогда;) –

0

я также столкнулся с теми же проблемами .I разрешенной путем добавления класса в TestProxyService с аннотацией @Singleton, а затем вводя ресурс, который я хотел проверить .The прокси-класс будет ссылаться на фактический класс ресурс .Эта Например

@ApplicationPath("/rest") 

public class SampleRestResource{ 
....methods 

} 
@Singleton 
@ApplicationPath("/rest") 

public class TestResource{ 
@Inject 
Смежные вопросы