2016-09-20 2 views
0

Я новичок в cxf и верблюде, и я сталкиваюсь с некоторыми проблемами при попытке использовать JacksonJsonProvider.Karaf - получение «Невозможно загрузить класс» при установке функции

Я пытаюсь определить конечную точку службы cxf, которая потребляет объект json и отправляет запрос на маршрут верблюда. Маршрут верблюда не важен для моей проблемы.

В моем файле blueprint.xml я определил боб для JacksonJsonProvider:

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

Когда я пытаюсь установить свою функцию в karaf я получаю следующее сообщение об ошибке:

BlueprintContainerImpl | ?
? | 21 - org.apache.aries.blueprint.core - 1.4.2 | Unable to start blueprint container for bundle test-mgw-api org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to load class org.codehaus.jackson.jaxrs.JacksonJsonProvider from recipe 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> 
+0

ли вы объявляете верблюжью-CXF зависимости в 'pom.xml'? Я не уверен, что это на 100% необходимо, но в нашей среде необходимо свести на нет Jackson Jax-RS с Camel. –

+1

Вы установили зависимость Jackson в Karaf? И не только ваш комплект. –

+0

@ruffp Я также ' org.apache.camel верблюжьей CXF ' в моей pom.xml – Ringbo

ответ

0

Вы должны изменить в плане тег jaxrs like this:

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