资源未在OSGi容器中导出

时间:2018-03-05 10:26:12

标签: rest jax-rs osgi apache-felix declarative-services

我正在尝试通过OSGi公开REST服务(使用Apache Felix)。我正在使用osgi-jax-rs-connector发布资源。这是资源接口:

@Path("/bingo")
public interface BingoService {

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/lottery")
List<Integer> getLottery();
}

该实现使用DS注释来获取对容器中提供的服务的引用:

@Component(
    immediate = true,
    service = BingoService.class,
    properties = "jersey.properties")
public class Bingo implements BingoService {

@Reference
private RandomNumberGenerator rng;

@Activate
public void activateBingo() {
    System.out.println("Bingo Service activated using " +
                        rng.getClass().getSimpleName());
}

@Override
public List<Integer> getLottery() {
    List<Integer> result = new ArrayList<>();
    for (int i = 5; i > 0; i--) {
        result.add(rng.nextInt());
        }
    return result;
    }
}

jersey.properties 只包含此行

service.exported.interfaces=*

当我部署捆绑包时,它会启动并正确注册服务。但如果我转到 http://localhost:8181/services/bingo/lottery ,我会 404 。 有人能指出我这个问题,还是给我一些关于在哪里看的建议?

1 个答案:

答案 0 :(得分:0)

在阅读OSGi的documentation - JAX-RS Connector时,它希望在服务实例对象上找到注释@Path@Provider。您已将它们放置在组件实现的接口上。

我不确定BingoService界面的用途是什么。这不是JAX-RS服务所必需的。通常,您将使用自己的类型(例如service=Bingo.class)或仅java.lang.Object注册资源类。