大家好, 我正在使用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>