无法访问使用ECF和bndtools的Osgi REST API服务

无法访问使用ECF和bndtools的Osgi REST API服务,rest,osgi,apache-felix,bndtools,eclipse-ecf,Rest,Osgi,Apache Felix,Bndtools,Eclipse Ecf,我目前正试图使用OSGI远程服务公开RESTfulWebService,但似乎我在ECF教程中遗漏了一些东西。 以下是impl类的详细信息: import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import org.example.api.HelloWorldService; import org.osgi.service.component.annotations.Component; @

我目前正试图使用OSGI远程服务公开RESTfulWebService,但似乎我在ECF教程中遗漏了一些东西。 以下是impl类的详细信息:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.example.api.HelloWorldService;
import org.osgi.service.component.annotations.Component;

@Path("/helloworld")
@Component(property = { "service.exported.interfaces=HTTP", 
"service.exported.configs=ecf.jaxrs.jersey.server",
    "ecf.jaxrs.jersey.server.alias=/jersey" })
public class HelloWorldResource implements HelloWorldService {
@GET
@Produces("text/plain")
public String getMessage() {
    // Return some textual content
    return "Hello World";
}}
我通过这个链接了解了事物是如何结合在一起的,但是我无法获得基于jax-rs路径注释的http200ok消息

请注意,所有捆绑包都已正确解析。

导出的接口属性不应为“HTTP”。相反,它必须是接口fqname或Star。所以试试这个:

"service.exported.interfaces=*"

导出的接口属性不应为“HTTP”。相反,它必须是接口fqname或Star。所以试试这个:

"service.exported.interfaces=*"

如果您尚未使用,请更新到ECF 3.14.0。此外,在3.14.0/Photon(过去几周)之后,JaxRS提供程序发生了重大变化,以支持OSGi R7异步远程服务,因此请确保您也有来自JaxRS提供程序的最新版本。所需的远程服务属性已根据R7更改而更改。请参阅hello示例的服务属性以及在Karaf上运行hello示例的简短教程:

简言之,不再需要指定ecf.jaxrs.jersey.server.alias,但还需要设置其他(新标准化的)属性

我想创建一个bndtools4jaxrs运行描述符模板,我认为这将使您更加容易。我怀疑您的问题可能是没有所有必要的jersey捆绑包,因为jersey有很多依赖项……所有这些都必须存在才能成功导出远程服务。对于ref,以下是使用当前存在的项目和bndrun模板的设置信息:

我将为CXF和Jersey发行版提供商创建一个bndtools4 bndrun模板,但自从JaxRSProvider更改以来,时间不够。如果您想表达您对bndrun模板和/或贡献帮助的愿望,请在上打开一个问题,这将有助于跟踪

同时,捆绑包的示例列表位于此处的产品文件中:


如果您尚未使用,请更新到ECF 3.14.0。此外,在3.14.0/Photon(过去几周)之后,JaxRS提供程序发生了重大变化,以支持OSGi R7异步远程服务,因此请确保您也有来自JaxRS提供程序的最新版本。所需的远程服务属性已根据R7更改而更改。请参阅hello示例的服务属性以及在Karaf上运行hello示例的简短教程:

简言之,不再需要指定ecf.jaxrs.jersey.server.alias,但还需要设置其他(新标准化的)属性

我想创建一个bndtools4jaxrs运行描述符模板,我认为这将使您更加容易。我怀疑您的问题可能是没有所有必要的jersey捆绑包,因为jersey有很多依赖项……所有这些都必须存在才能成功导出远程服务。对于ref,以下是使用当前存在的项目和bndrun模板的设置信息:

我将为CXF和Jersey发行版提供商创建一个bndtools4 bndrun模板,但自从JaxRSProvider更改以来,时间不够。如果您想表达您对bndrun模板和/或贡献帮助的愿望,请在上打开一个问题,这将有助于跟踪

同时,捆绑包的示例列表位于此处的产品文件中:


我已经为您的hello jaxrs服务创建了一个bndtools4 bndrun。首先,您需要使用ECF bndtools.workspace模板创建一个新的工作区。只需按照此处的说明进行操作:

用于从ECF bndtools.workspace模板创建工作区。就在今天,我已经将JaxRS包添加到此工作区模板中

然后我用这个接口创建了一个org.example.api项目

package org.example.api;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/helloworld")
public interface HelloWorldService {

    @GET
    @Path("/hello")
    @Produces("text/plain")
    String getMessage();
}
请注意,它与您的略有不同,因为它为getMessage()方法提供了@PATH注释

然后在另一个名为org.example.impl的项目中,有这样一个类:

package org.example.impl;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.example.api.HelloWorldService;
import org.osgi.service.component.annotations.Component;

@Path("/helloworld")
@Component(property = { "service.exported.interfaces=*", 
"service.intents=jaxrs" })
public class HelloWorldResource implements HelloWorldService {
    @GET
    @Path("/hello")
    @Produces("text/plain")
public String getMessage() {
    // Return some textual content
    return "Hello World";
}}
jaxrs注释与接口相同(应该是这样)。数量更少

这里是bndrun(我称之为jettyserver.bndrun):


如果您允许,我想将jaxrs hello api和impl项目的bndtools项目模板添加到ECF bndtools.workspace repo,以及jersey和cxf bndrun服务器和客户端模板(完成后)。我将在接下来的几天内创建bndrun并进行测试。

我已经为类似hello jaxrs服务的东西创建了一个bndtools4 bndrun。首先,您需要使用ECF bndtools.workspace模板创建一个新的工作区。只需按照此处的说明进行操作:

用于从ECF bndtools.workspace模板创建工作区。就在今天,我已经将JaxRS包添加到此工作区模板中

然后我用这个接口创建了一个org.example.api项目

package org.example.api;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/helloworld")
public interface HelloWorldService {

    @GET
    @Path("/hello")
    @Produces("text/plain")
    String getMessage();
}
请注意,它与您的略有不同,因为它为getMessage()方法提供了@PATH注释

然后在另一个名为org.example.impl的项目中,有这样一个类:

package org.example.impl;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.example.api.HelloWorldService;
import org.osgi.service.component.annotations.Component;

@Path("/helloworld")
@Component(property = { "service.exported.interfaces=*", 
"service.intents=jaxrs" })
public class HelloWorldResource implements HelloWorldService {
    @GET
    @Path("/hello")
    @Produces("text/plain")
public String getMessage() {
    // Return some textual content
    return "Hello World";
}}
jaxrs注释与接口相同(应该是这样)。数量更少

这里是bndrun(我称之为jettyserver.bndrun):

如果您允许,我想将jaxrs hello api和impl项目的bndtools项目模板添加到ECF bndtools.workspace repo,以及jersey和cxf bndrun服务器和客户端模板(完成后)。我将在未来几天内创建BNDRUN并进行测试。

有关信息:

我已经为JAXRSAPI、Impl、消费者项目(基于HelloWorldService)添加了项目模板,并为Jersey服务添加了bndrun模板