1

我正在尝试在 OSGi Bundle 中使用 com.sun.crypto.provider.SunJCE (用于 HMAC)。

我正在使用带有这些配置的 maven-bundle-plugin:

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

当我执行我的包时,我收到了这个错误:

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

如何获取我的 OSGi 包中的代码以访问 com.sun.crypto.provider?

4

2 回答 2

3

查看您的 maven 配置,跳出来的一件事是让您的所有包导入可选是不明智的。它取消了 OSGi 通过将问题推迟到执行时间给您带来的许多好处,而不是在捆绑包开始时让您知道某些事情是不正确的。换句话说,缓慢失败而不是快速失败!它仅适用于真正可选的依赖项。

当然,您的最终目标是完全不失败,而不仅仅是更快地失败。作为了解正在发生的事情的起点,您是否打开了构建的捆绑包并检查了加密包是否实际被嵌入?检查您的构建是否符合您的期望是一个好主意。

但是,在这种特殊情况下,由于这是您通常希望 JVM 提供的类,我建议检查您的引导类路径以确保它可用,删除嵌入依赖项,并使用 org.osgi.framework.system .packages.extra 属性而不是嵌入依赖项。

于 2012-04-04T04:28:08.963 回答
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);
于 2013-04-05T13:07:58.227 回答