无法访问使用ECF和bndtools的Osgi REST API服务
我目前正试图使用OSGI远程服务公开RESTfulWebService,但似乎我在ECF教程中遗漏了一些东西。 以下是impl类的详细信息:无法访问使用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; @
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模板