资源未在OSGi容器中导出

问题描述 投票:1回答:1

我正在尝试通过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.有人能指出我这个问题或者给我一些关于在哪里看的建议吗?

rest jax-rs osgi apache-felix declarative-services
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.