gpt4 book ai didi

java - TomEE 嵌入式和自定义 JAX-RS 应用程序部署

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:46 26 4
gpt4 key购买 nike

伙计们,我将 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 时,我应该定义其他属性吗?我在示例应用程序中看到了一些:

但它们都不起作用。

这是我的 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>

最佳答案

最终通过将 EJBContainer.APP_NAME 属性添加到创建嵌入式容器时传递的属性来解决它:

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

关于java - TomEE 嵌入式和自定义 JAX-RS 应用程序部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20698703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com