异常抛出java.lang.NoClassDefFoundError:来自Domino OSGi插件的org.apache.commons.logging.Logfactory

时间:2013-02-12 17:53:18

标签: java servlets osgi lotus-domino

我正在构建一个IBM Domino OSGi插件,它将一个包含HttpServlet的类打包。

我想使用getpostServlet进行Http调用(org.apache.httpcomponents.httpclient_4.2.3org.apache.httpcomponents.httpcore_4.2.3等)(从OSGi包中提取) )。

我已将两个jar文件添加到domino\jvm\lib\ext,对java.policy文件*进行了常规更改,并将jar添加到构建路径中。

当我添加代码来创建和使用DefaultHttpClient时,服务器会抛出错误:

java.lang.NoClassDefFoundError: org.apache.commons.logging.Logfactory

我知道在Domino的java实现中,日志记录是一个棘手的主题。奇怪的是我有一个运行与NSF包含的Servlet相同的代码,运行得很好。但是在我的OSGi上下文中它会中断。如果我使用包含说/log.nsf/的网址调用servlet,它仍会中断。

感激不尽的任何帮助!

grant {
permission java.security.AllPermission;
};

2 个答案:

答案 0 :(得分:0)

我不确定为什么它在您的NSF实现中有效,但看起来您需要 commons-logging-1.1.1.jar 。这应该包含在 httpcomponents 下载中。或者你可以从这里下载:

http://commons.apache.org/logging/download_logging.cgi

答案 1 :(得分:0)

我之前在XPage中遇到过org.apache包的问题,​​主要是因为他们尝试登录到文件系统而安全策略不喜欢这样。将它添加为引用的库等,它使用与XPage运行时相同的ClassLoader,因此尝试使用服务器中的那个,当你得到NoClassDefFoundError时就是这样。

尝试将其添加到OSGi插件的WebContent \ WEB-INF \ lib文件夹中。将其添加到该路径可以在NSF中使用,因为它使用不同的ClassLoader。它也可以很好地规避你在OSGi插件中遇到的问题。