【问题标题】:Karaf - getting "Unable to load class" when installing featureKaraf - 安装功能时出现“无法加载类”
【发布时间】:2016-09-20 15:15:41
【问题描述】:

我是 cxf 和 camel 的新手,在尝试使用 JacksonJsonProvider 时遇到了一些问题。

我正在尝试定义一个使用 json 对象并将请求发送到骆驼路由的 cxf 服务端点。骆驼路线对我的问题并不重要。

在我的 blueprint.xml 文件中,我为 JacksonJsonProvider 定义了一个 bean:

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>

当我尝试在 karaf 中安装我的功能时,我收到以下错误:

BlueprintContainerImpl | ?
? | 21 - org.apache.aries.blueprint.core - 1.4.2 |无法启动 bundle test-mgw-api 的蓝图容器 org.osgi.service.blueprint.container.ComponentDefinitionException: 无法加载类 org.codehaus.jackson.jaxrs.JacksonJsonProvider 来自配方 BeanRecipe[name='jsonProvider']

我已经在我的 pom.xml 中添加了正确的依赖项

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.9.13</version>
    </dependency>

这里一定有一些简单的东西我错过了,但我现在花了很多时间才弄明白,但我一无所获。 有人知道我在这里做错了什么吗?

我在下面提供了我的代码。

服务接口:

@Path("/auth/")
public interface AuthService {

    @POST
    @Path("/login")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Response login(LoginRequest loginRequest);

    @GET
    @Path("/person/get/{id}/")
    @Produces("application/xml")
    Response getPerson(@PathParam("id") String id);

    @DELETE
    @Path("/person/delete/{id}")
    void deletePerson(@PathParam("id") String id);
}

请求模型:

@XmlRootElement(name="Login")
public class LoginRequest {
    private String username;
    private String password;
    private int loginType;

    public LoginRequest(String username, String password) {
        this.username = username;
        this.password = password;
        this.loginType = 1;
    }

    public LoginRequest() {
    }
}

Blueprint.xml

<blueprint
        xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf"
        xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
        xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
        xsi:schemaLocation="
        http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

        <cm:property-placeholder persistent-id="test.mgw.cxf.receive" update-strategy="reload">
            <cm:default-properties>
                <cm:property name="CXFserver" value="http://localhost:8989/"/>
                <cm:property name="service" value="rest" />
            </cm:default-properties>
        </cm:property-placeholder>

        <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>

    <cxf:rsServer id="rsServer" address="${CXFserver}${service}"
                  serviceClass="test.mgw.api.AuthService"
                  loggingFeatureEnabled="true" loggingSizeLimit="20">
        <cxf:providers>
            <ref component-id="jsonProvider"/>
        </cxf:providers>
    </cxf:rsServer>
</blueprint>

【问题讨论】:

  • 您是否在pom.xml 中声明了camel-cxf 依赖项?我不确定这是否 100% 必要,但在我们的环境中,需要将 Jackson Jax-RS 与 Camel 连接起来。
  • 您是否也在 Karaf 中安装了 jackson 依赖项?不仅仅是你的捆绑包。
  • @ruffp 我的 pom.xml 中也有 &lt;dependency&gt; &lt;groupId&gt;org.apache.camel&lt;/groupId&gt; &lt;artifactId&gt;camel-cxf&lt;/artifactId&gt; &lt;/dependency&gt;
  • @SoucianceEqdamRashti 我尝试使用install mvn:org.codehaus.jackson/jackson-core-asl/1.9.13 install mvn:org.codehaus.jackson/jackson-jaxrs/1.9.13 install mvn:org.codehaus.jackson/jackson-mapper-asl/1.9.13 在karaf 中安装osgi 包我也启动了包,但它仍然无法正常工作。我得到同样的错误。
  • @Ringbo 和 camel-cxf 功能也部署在 OSGI 中,正如“Souciance”所说?我注意到我们的环境中还有一个功能 camel-jackson

标签: jackson apache-camel cxf apache-karaf


【解决方案1】:

您应该在蓝图中将标签更改为jaxrs like this

<jaxrs:server id="endpoint1">
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
    </jaxrs:providers>
</jaxrs:server>

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多