【问题标题】:Get Instance of WebTarget in OSGi在 OSGi 中获取 WebTarget 的实例
【发布时间】:2015-12-06 18:44:58
【问题描述】:

我在 OSGi 上运行一些测试并尝试创建 WebTarget 的实例以使用以下代码测试在 OSGi 中发布的端点:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
...
...

private static final String port = "8080";
private static final String CONTEXT = "/someContext";
private static final URI baseUri = URI.create("http://localhost:" + port + CONTEXT);

@Test
public void sentence() {
    Client c = ClientBuilder.newClient();
    final WebTarget target = c.target(baseUri);

    Response response = target.path("/service").request().post(Entity.entity(new MockMessage("123", "sessionId123"), MediaType.APPLICATION_JSON_TYPE), Response.class);

    logger.info("JERSEY RESULT = " + response.toString());
    assertEquals(Response.ok().build(), response);
}

问题是当它运行时抛出异常java.lang.ClassNotFoundException: Provider org.glassfish.jersey.internal.RuntimeDelegateImpl could not be instantiated: java.lang.IllegalStateException: No generator was provided and there is no default generator registered。最糟糕的是,缺少的类 (RuntimeDelegateImpl) 位于 jersey-common-2.x.jar 包的 internal 包下。

那么,有人知道如何在 OSGi 下创建 WebTarget 的实例吗?

顺便说一句,我在 pom 文件中已经有了这两个依赖项:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-common</artifactId>
  <version>2.22.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>javax.ws.rs-api</artifactId>
  <version>2.0.1</version>
  <scope>test</scope>
</dependency>

【问题讨论】:

  • WebTarget 到底是什么?它属于什么包或库?您在代码示例中省略了导入。

标签: java maven osgi jersey-2.0


【解决方案1】:

由于我使用 Arquillian 在 OSGi 下运行测试,所以我最终通过添加注解 @RunAsClient 在 OSGi 容器外运行测试并避免在 .internal 包中找不到依赖关系来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2016-03-08
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2018-07-04
    • 2012-12-17
    相关资源
    最近更新 更多