Служба Osgi REST API с использованием ECF и bndtools недоступна

В настоящее время я пытаюсь разоблачить спокойный веб-сервис с помощью удаленных сервисов OSGI, но кажется, что я что-то упускаю из учебника по 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";
}}

Я перешел по этой ссылке, чтобы узнать, как все может быть вместе, но мне не удалось получить сообщение HTTP 200 ok на основе аннотации пути jax-rs

https://wiki.eclipse.org/Tutorial:_Using_REST_and_OSGi_Standards_for_Micro_Services

введите здесь описание изображения

Обратите внимание, что все пакеты разрешены правильно. введите здесь описание изображения


person Yazid    schedule 09.07.2018    source источник
comment
URL-адрес, который я использую: 127.0.0.1:8080/jersey/helloworld   -  person Yazid    schedule 11.07.2018


Ответы (4)


Я создал bndtools4 bndrun для чего-то вроде вашего сервиса hello jaxrs. Во-первых, вам нужно создать новую рабочую область, используя шаблон ECF bndtools.workspace. Просто следуйте инструкциям здесь:

https://wiki.eclipse.org/Bndtools_Support_for_Remote_Services_Development

для создания рабочего пространства из шаблона 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();
}

Обратите внимание, что он немного отличается от вашего, поскольку имеет аннотацию @PATH для метода getMessage().

Затем в другом проекте... с именем 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):

-runrequires: \
    bnd.identity;id='org.eclipse.ecf.provider.jersey.server',\
    osgi.identity;filter:='(&(osgi.identity=javax.validation.api)(version>=1.1.0))',\
    osgi.identity;filter:='(&(osgi.identity=org.apache.felix.gogo.command)(version>=1.0.2))',\
    osgi.identity;filter:='(&(osgi.identity=org.apache.felix.gogo.runtime)(version>=1.0.10))',\
    osgi.identity;filter:='(&(osgi.identity=org.slf4j.api)(version>=1.7.2))',\
    bnd.identity;version='latest';id='org.example.impl',\
    bnd.identity;id='org.apache.felix.gogo.command',\
    bnd.identity;id='org.apache.felix.gogo.runtime',\
    bnd.identity;id='org.apache.felix.gogo.shell',\
    bnd.identity;id='org.eclipse.ecf.osgi.services.remoteserviceadmin.console',\
    bnd.identity;id='org.apache.felix.scr',\
    bnd.identity;id='org.eclipse.ecf.osgi.services.distribution',\
    bnd.identity;id='org.eclipse.ecf.provider.jersey.client'
-runfw: org.apache.felix.framework;version='[5.6.10,5.6.10]'
-runee: JavaSE-1.8
-runbundles: \
    com.fasterxml.jackson.core.jackson-annotations;version='[2.9.2,2.9.3)',\
    com.fasterxml.jackson.core.jackson-core;version='[2.9.2,2.9.3)',\
    com.fasterxml.jackson.core.jackson-databind;version='[2.9.2,2.9.3)',\
    com.fasterxml.jackson.jaxrs.jackson-jaxrs-base;version='[2.9.2,2.9.3)',\
    com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider;version='[2.9.2,2.9.3)',\
    javax.annotation;version='[1.2.0,1.2.1)',\
    javax.inject;version='[1.0.0,1.0.1)',\
    javax.persistence;version='[2.2.0,2.2.1)',\
    javax.validation.api;version='[1.1.0,1.1.1)',\
    javax.ws.rs;version='[2.0.1,2.0.2)',\
    org.aopalliance;version='[1.0.0,1.0.1)',\
    org.apache.felix.configadmin;version='[1.8.16,1.8.17)',\
    org.apache.felix.eventadmin;version='[1.4.10,1.4.11)',\
    org.apache.felix.gogo.command;version='[1.0.2,1.0.3)',\
    org.apache.felix.gogo.runtime;version='[1.0.10,1.0.11)',\
    org.apache.felix.http.jetty;version='[3.4.8,3.4.9)',\
    org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
    org.apache.felix.scr;version='[2.0.14,2.0.15)',\
    org.eclipse.core.jobs;version='[3.9.3,3.9.4)',\
    org.eclipse.ecf;version='[3.9.0,3.9.1)',\
    org.eclipse.ecf.discovery;version='[5.0.300,5.0.301)',\
    org.eclipse.ecf.identity;version='[3.9.0,3.9.1)',\
    org.eclipse.ecf.osgi.services.remoteserviceadmin;version='[4.6.800,4.6.801)',\
    org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy;version='[1.0.100,1.0.101)',\
    org.eclipse.ecf.provider.jaxrs;version='[1.3.0,1.3.1)',\
    org.eclipse.ecf.provider.jaxrs.server;version='[1.4.0,1.4.1)',\
    org.eclipse.ecf.provider.jersey.server;version='[1.3.0,1.3.1)',\
    org.eclipse.ecf.remoteservice;version='[8.13.0,8.13.1)',\
    org.eclipse.ecf.remoteservice.asyncproxy;version='[2.1.0,2.1.1)',\
    org.eclipse.equinox.common;version='[3.9.0,3.9.1)',\
    org.eclipse.equinox.concurrent;version='[1.1.0,1.1.1)',\
    org.eclipse.equinox.supplement;version='[1.7.0,1.7.1)',\
    org.eclipse.osgi.services.remoteserviceadmin;version='[1.6.200,1.6.201)',\
    org.glassfish.hk2.api;version='[2.5.0,2.5.1)',\
    org.glassfish.hk2.osgi-resource-locator;version='[2.5.0,2.5.1)',\
    org.glassfish.hk2.utils;version='[2.5.0,2.5.1)',\
    org.glassfish.jersey.bundles.repackaged.jersey-guava;version='[2.22.1,2.22.2)',\
    org.glassfish.jersey.containers.servlet.core;version='[2.22.1,2.22.2)',\
    org.glassfish.jersey.core.jersey-common;version='[2.22.1,2.22.2)',\
    org.glassfish.jersey.core.jersey-server;version='[2.22.1,2.22.2)',\
    org.glassfish.jersey.ext.entityfiltering;version='[2.22.1,2.22.2)',\
    org.glassfish.jersey.media.jersey-media-json-jackson;version='[2.22.1,2.22.2)',\
    org.slf4j.api;version='[1.7.2,1.7.3)',\
    org.example.api;version=snapshot,\
    org.example.impl;version=snapshot,\
    org.apache.felix.gogo.shell;version='[1.0.0,1.0.1)',\
    org.eclipse.ecf.console;version='[1.1.0,1.1.1)',\
    org.eclipse.ecf.osgi.services.remoteserviceadmin.console;version='[1.0.0,1.0.1)',\
    org.eclipse.ecf.osgi.services.distribution;version='[2.1.200,2.1.201)',\
    javassist;version='[3.13.0,3.13.1)',\
    org.eclipse.ecf.provider.jaxrs.client;version='[1.3.0,1.3.1)',\
    org.eclipse.ecf.provider.jersey.client;version='[1.3.0,1.3.1)',\
    org.glassfish.hk2.locator;version='[2.5.0,2.5.1)',\
    org.glassfish.jersey.core.jersey-client;version='[2.22.1,2.22.2)'

С вашего разрешения я хотел бы добавить шаблоны проектов bndtools для проектов jaxrs hello api и impl в репозиторий ECF bndtools.workspace, а также сервер jersey и cxf bndrun и клиентские шаблоны (как только я их закончу). Я создам bndruns и проверю в течение следующих нескольких дней.

person Scott Lewis    schedule 12.07.2018
comment
Большое спасибо за все подробности, которыми вы поделились, теперь все работает правильно, используя localhost:8080/1. /helloworld/hello, еще раз большое спасибо - person Yazid; 12.07.2018

Свойство экспортируемых интерфейсов не должно быть «HTTP». Вместо этого это должен быть интерфейс fqname или Star. Итак, попробуйте следующее:

"service.exported.interfaces=*"
person Christian Schneider    schedule 10.07.2018
comment
Да, это была звезда, прежде чем я начал догадываться, в чем может быть проблема. Поэтому я заменил его на HTTP - person Yazid; 10.07.2018
comment
Любая помощь, пожалуйста, чтобы запустить эту службу - person Yazid; 10.07.2018

Если вы еще не используете, обновите ECF до версии 3.14.0. Кроме того, после 3.14.0/Photon (последние несколько недель) поставщики JaxRS претерпели значительные изменения для поддержки асинхронных удаленных служб OSGi R7, поэтому убедитесь, что у вас также установлены последние версии от JaxRSProviders. Требуемые свойства удаленной службы изменились в соответствии с изменениями R7. Пожалуйста, ознакомьтесь со свойствами службы примеров hello и этим кратким руководством по запуску примера hello на Karaf:

https://wiki.eclipse.org/Tutorial:_JaxRS_Remote_Services_on_Karaf

Короче говоря, больше нет необходимости указывать ecf.jaxrs.jersey.server.alias, но есть другие (недавно стандартизированные) свойства для установки.

Я хотел бы создать шаблон дескриптора запуска bndtools4 JaxRS, и я думаю, что это значительно облегчит вам задачу. Я подозреваю, что ваша проблема может заключаться в том, что у вас нет всех необходимых комплектов трикотажных изделий, поскольку трикотаж имеет довольно много зависимостей... все они должны присутствовать для успешного экспорта удаленной службы. Для справки, вот информация о настройке для использования шаблонов проекта и bndrun, которые в настоящее время доступны:

https://wiki.eclipse.org/Bndtools_Support_for_Remote_Services_Development

Я создам шаблон bndtools4 bndrun для провайдеров распространения CXF и Jersey, но у меня не было достаточно времени после изменений JaxRSProvider. Если вы хотите выразить свое желание получить шаблон bndrun и/или помочь с вкладом, откройте вопрос по адресу https://github.com/ECF/JaxRSProviders/issues, и это поможет отслеживать.

В то же время список примеров пакетов находится в файлах продукта здесь:

https://github.com/ECF/JaxRSProviders/tree/master/examples/com.mycorp.examples.student.remoteservice.host/launch

person Scott Lewis    schedule 11.07.2018
comment
Также... в karaf-features есть список примеров пакетов JaxRS: - person Scott Lewis; 11.07.2018
comment
находится здесь download.eclipse.org/rt/ecf/ РЕЛИЗ/site.p2/karaf-features.xml - person Scott Lewis; 11.07.2018
comment
Большое спасибо, что нашли время ответить на мой вопрос, я подниму вопрос в GitHub, чтобы получить эту функциональность. - person Yazid; 12.07.2018
comment
Что касается зависимостей, я думаю, что bndtools разрешает зависимости, просматривая связанные пакеты в настроенных репозиториях. О свойствах, не могли бы вы сказать мне, какой будет URL-адрес по умолчанию, который мне нужно использовать, когда ничего не установлено. - person Yazid; 12.07.2018

Для информации:

Я добавил шаблоны проектов для проектов JaxRS API, Impl, Consumer (на основе HelloWorldService) и добавил шаблоны bndrun для сервера и клиента Jersey, а также для сервера и клиента CXF.

См. https://github.com/ECF/JaxRSProviders/issues/6.

person Scott Lewis    schedule 13.07.2018
comment
Большое спасибо, это было действительно полезно - person Yazid; 13.07.2018