我正在尝试通过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 。 有人能指出我这个问题,还是给我一些关于在哪里看的建议?
答案 0 :(得分:0)
在阅读OSGi的documentation - JAX-RS Connector时,它希望在服务实例对象上找到注释@Path
或@Provider
。您已将它们放置在组件实现的接口上。
我不确定BingoService
界面的用途是什么。这不是JAX-RS服务所必需的。通常,您将使用自己的类型(例如service=Bingo.class
)或仅java.lang.Object
注册资源类。