#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». Пожалуйста, предложите, что я могу сделать