Websocket “错误”;没有这样的实例方法:java.util.Enumeration org.apache.log4j.Logger.getAllAppenders();在ApacheServiceMix 4.5.2中运行JWebSoketBundle时

Websocket “错误”;没有这样的实例方法:java.util.Enumeration org.apache.log4j.Logger.getAllAppenders();在ApacheServiceMix 4.5.2中运行JWebSoketBundle时,websocket,log4j,apache-karaf,apache-servicemix,Websocket,Log4j,Apache Karaf,Apache Servicemix,我想将JWebSocket嵌入到osgi环境中(例如ApacheServiceMix4.5.2)。我采取了以下步骤: 我将jWebSocketServer-Bundle-1.0.jar放到 servicemix 我创建了另一个bundle来调用JWebSocketServer类的主函数 但当mybundle运行时,它会引发上述异常。我试着调试以发现问题,我发现在JSocketFactory.java的第112行有一个错误 109 if (lDebug) { 110 Logger lL

我想将JWebSocket嵌入到osgi环境中(例如ApacheServiceMix4.5.2)。我采取了以下步骤:

  • 我将jWebSocketServer-Bundle-1.0.jar放到 servicemix
  • 我创建了另一个bundle来调用JWebSocketServer类的主函数
但当mybundle运行时,它会引发上述异常。我试着调试以发现问题,我发现在JSocketFactory.java的第112行有一个错误

109 if (lDebug) {
110     Logger lLogger = mLog.getRootLogger();
111     String lAppenderStr = "";
112     Enumeration lAppenders = lLogger.getAllAppenders()**; 
记录器没有getAllAppenders()方法。服务组合的guest log4j覆盖了jWebSocketServer-Bundle-1.0.jar中的log4j,但我对此不确定

你能帮帮我吗?多谢各位

下面是我在MyActivator类中调用JWebSocketSer的代码

公共类MyActivator实现BundleActivator {


}

由于ServiceMix/Karaf确实使用Pax日志功能来提供开箱即用的日志功能,因此此功能不可用。我想你必须确保JWebSocketSer不需要appender。如果您想添加自定义附加器,可以通过不同的方式完成。将Appender注册为服务或将片段捆绑包附加到包含此Appender的Pax日志记录实现捆绑包

请确保这两个东西都使用兼容的log4j版本。我检查了Karaf 2.3.3,它嵌入了Log4j 1.2.15。不起作用并且会导致很多问题的是JWebSocketServer打包,它是一个“胖罐子”。在JWebSocketServer.jar中又嵌入了log4j(顺便说一句,还有junit)


若你们放下一些东西,把普通JAR放到Karaf部署中,它会被包装在一个包中,这个包导出所有内容并具有动态导入包。为了避免您的问题,您可能需要重新打包jwebsocket。

对我来说,这看起来像是版本不匹配。它不会抛出ClassNotFound异常。班级决议很好。
public void start(BundleContext bundleContext) throws Exception
{
    JWebSocketServer.main(null);
}

public void stop(BundleContext bundleContext) throws Exception
{
}