【发布时间】:2013-12-20 07:48:18
【问题描述】:
伙计们, 我将 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>
【问题讨论】:
-
覆盖 openejb.cxf.jax-rs.providers 似乎也不起作用
标签: java maven jax-rs cxf apache-tomee