реализация службы REST OSGI на Jboss Fuse 6.3

#apache-karaf #osgi-bundle #jbossfuse

#apache-karaf #osgi-bundle #jbossfuse

Вопрос:

ПРИВЕТ, я пытаюсь реализовать простую службу Rest, которая возвращает ответ JSON на fuse. Следующее — это мой POM.xml

   <?xml version="1.0" encoding="UTF-8"?>
   <project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.fuse.test</groupId>
<artifactId>fuse-hw</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>bundle</packaging>

<dependencies>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-cxf</artifactId>
        <version>2.15.0</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.9.10</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.12</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.12</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <version>2.4.0</version>
            <configuration>
                <instructions>
                    <Export-Package></Export-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>
  

и application.xml в разделе /resources/META-INF/spring находится

  <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jaxrs="http://cxf.apache.org/jaxrs"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">

<jaxrs:server id="restService" address="http://localhost:9000/lastmile">
    <jaxrs:serviceBeans>
        <ref bean="lastMileService" />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="jacksonJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>
<bean id="lastMileService" class="com.fuse.test.RestService" />
<bean id="jacksonJsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
  

Когда я устанавливаю пакет на Fuse, я получаю следующую ошибку

 **Error executing command: Error starting bundles:
         Unable to start bundle 315: Unresolved constraint in bundle org.fuse.test.fuse-hw [315]: 
     Unable to resolve 315.0: missing requirement [315.0] osgi.wiring.package; (amp; 
     (osgi.wiring.package=org.codehaus.jackson.jaxrs)(version>=1.9.0)(!(version>=2.0.0)))**
  

Пожалуйста, помогите, как это можно решить.
Также есть ли какие-либо хорошие учебные пособия / обучающие видеоролики для FUSE / Karaf. Информация об OSGI, похоже, очень ограничена в Интернете.

Ответ №1:

Я понял это, проблема заключалась в том, что версия jackson, которую я использовал, отличалась от той, что была встроена в fuse 6.3. используйте следующую команду, чтобы узнать версию библиотеки, которую вы установили в среде fuse karaf

     JBossFuse:karaf@root> list -l | grep -i "jackson"
    [ 146] [Active     ] [            ] [       ] [   80] 
    mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/2.6.3
    [ 147] [Active     ] [            ] [       ] [   80] 
    mvn:com.fasterxml.jackson.module/jackson-module-paranamer/2.6.3
   [ 148] [Active     ] [            ] [       ] [   80] 
   mvn:com.fasterxml.jackson.module/jackson-module-scala_2.10/2.6.3
   [ 300] [Active     ] [            ] [       ] [   50] mvn:org.apache.camel/camel- 
  jackson/2.17.0.redhat-630187
   [ 313] [Active     ] [            ] [       ] [   50] 
  mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.6.3
 [ 314] [Active     ] [            ] [       ] [   50] mvn:org.apache.camel/camel- 
 jacksonxml/2.17.0.redhat-630187
  

итак, версия, которую я должен был использовать, была 2.6.3, или предпочтительным вариантом было бы использовать

          <dependency>
            <groupId>org.jboss.fuse.bom</groupId>
            <artifactId>jboss-fuse-parent</artifactId>
            <version>6.3.0.redhat-187</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
  

и нет необходимости указывать версии jars.

Также еще один вопрос, связанный с установкой любого jar, не являющегося частью пакета fuse, используйте следующую команду

  JBossFuse:karaf@root> install -s wrap:file:/<abc.jar>
  

Комментарии:

1. Привет, я столкнулся с той же проблемой, попробовал вышеупомянутое решение, но в нем написано «Отсутствует артефакт org.jboss.fuse.bom: jboss-fuse-parent:pom: 6.3.0.redhat-475-02». Пожалуйста, предложите, что я могу сделать