2017-11-14 27 views
0

카멜에서 Karl을 청사진 xml과 함께 사용하고 있는데 다른 번들에서 오는 클래스로 콩을 만들고 싶습니다.외부 번들에서 청사진으로 빈 만들기

<blueprint> 
    ... 
    <bean id="token-validation" class="com.xxx.security.JwtTokenValidator" init-method="init" > 
     <property name="realm" value="${auth.realm}"/> 
    </bean> 
    ... 
    <camelContext> 
     <route id="route.EventsNotify" routePolicyRef="token-validation"> 
     ... 
    </camelContext> 
</blueprint> 

JwtTokenValidator 클래스는이 경로 route.EventsNotify에 적용되는 그 이유는, 낙타의 RoutePolicySupport을 확장 다른 번들에 있습니다.

public class JwtTokenValidator extends RoutePolicySupport {  
     @Override 
     public void onExchangeBegin(Route route, Exchange exchange) { 
      super.onExchangeBegin(route, exchange); 
      checkAuthorizationHeader(exchange); 
     }  
     ... 
    } 

이 묶음은 많은 프로젝트에서 사용하기 위해 앞서 언급 한 것과 같은 몇 가지 종속성과 클래스를 가지고 있습니다. 같은 코드를 몇 번이고 반복해서 쓰는 대신 한 번 쓰고 많은 프로젝트에 적용합니다.

불행하게도이 작동하지 않습니다, 나는 클래스가 RoutePolicySupport을 확장하기 때문에 측면에서 원하는 RoutePolicy 인터페이스를 구현하는 이유는, 내가 이해할 수없는 스택 트레이스

Caused by: java.lang.ClassCastException: Cannot cast com.xxx.security.JwtTokenValidator to org.apache.camel.spi.RoutePolicy 

에서 다음과 같은 오류를 얻고있다.

클래스를 동일한 번들로 이동하면 작동하지만 이전에 설명한 이유 때문에 별도의 번들로 사용해야합니다.

누군가 내가 틀린 곳을 알려주겠습니까?

고맙습니다.

+0

봐, 당신은 서비스/참조 또는 뭔가 (캔트 리콜로 설정 다르게이 조금 필요 내 머리 위에 100 %) –

+0

각 낙타에 연결된 낙타를 확인하십시오. Bean이 다른 클래스 로더에 의해로드 된'RoutePolicy' 인터페이스를 구현할 수도 있습니다. 카라프에 카멜을 어떻게 설치 했습니까? –

+0

전체 Apache Karaf를 어셈블리하는 karaf-maven-plugin을 사용하고 있습니다. Camel은 해당 플러그인의 startupFeatures로로드됩니다. –

답변

0

필요한 모든 클래스 (org.apache.camel.spi.RoutePolicy, ...)를 현재 번들의 classLoader로 가져 오십시오. 당신은 받는다는 - 번들 플러그인 번들을 빌드하는 경우, 당신은 이런 식으로 작업을 수행 할 수 있습니다 OSGi의 청사진 문서에서

 <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     ... 
     <configuration> 
      <instructions> 
      ... 
      <Import-Package> 
       ..., 
       org.apache.camel.spi*;version=[min_version, max_version), 
       ... 
      </Import-Package> 
      </instructions> 
     </configuration> 
     </plugin>