2012-04-04 8 views
1

OSGi 번들에서 com.sun.crypto.provider.SunJCE (HMAC 용)를 사용하려고합니다.OSGi 번들에서 com.sun.crypto.provider.SunJCE 사용

나는이 CONFIGS으로 받는다는 - 번들 플러그인을 사용하고 있습니다 : 내은 OSGi의 코드를 얻을 수있는 방법

Caused by: java.lang.ClassNotFoundException: com.sun.crypto.provider.SunJCE 

:

<Embed-Dependency>*;scope=runtime;inline=false</Embed-Dependency> 
<Import-Package>*;resolution:=optional</Import-Package> 

난 내 번들을 실행하면이 오류를 얻을 수 번들로 com.sun.crypto.provider에 액세스 할 수 있습니까?

답변

3

귀하의 maven 구성을 살펴보면, 모든 패키지 가져 오기를 선택 사항으로 만드는 것이 현명하지 못한 점이 하나 있습니다. OSGi는 번들 시작 시간에 무엇인가가 옳지 않다는 것을 알려주지 않고 실행 시간에 문제를 부여함으로써 많은 이점을 없앤다. 빨리 실패 대신 느리게 실패합니다. 이것은 진정한 선택 사항 인 종속성에만 적합합니다.

물론 궁극적 인 목표는 더 빨리 실패하는 것이 아니라 전혀 실패하지 않는 것입니다. 무슨 일이 일어나고 있는지 이해하기위한 출발점으로, 당신은 당신의 구축 된 번들을 열고 암호화 패키지가 실제로 끼워져 있는지 확인 했습니까? 빌드가 자신이 원하는대로하고 있는지 확인하는 것이 좋습니다.

그러나이 특별한 경우에는 일반적으로 JVM이 제공 할 것으로 기대하는 클래스이므로 부트 클래스 경로를 확인하여 사용 가능함을 확인하고 포함 종속성을 삭제하고 org.osgi를 사용하는 것이 좋습니다. 종속성을 포함하는 대신 .framework.system.packages.extra 속성

0

왜 com.sun.crypto 클래스가 필요합니까? 일반적으로 java. * API를 통해 암호화 기능에 액세스 할 수 있습니까? 예 :

KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5"); 
SecretKey key = keyGen.generateKey(); 
Mac mac = Mac.getInstance(key.getAlgorithm()); 
mac.init(key); 
String str = "This message will be digested"; 
byte[] utf8 = str.getBytes("UTF8"); 
byte[] digest = mac.doFinal(utf8); 
관련 문제