Jetty 地铁+;码头+;OSGi=疼痛

Jetty 地铁+;码头+;OSGi=疼痛,jetty,osgi,jax-ws,java-metro-framework,equinox,Jetty,Osgi,Jax Ws,Java Metro Framework,Equinox,我正试图将Sun的HTTPServer换成更好的Jetty服务器,在一个OSGi包中,运行在Equinox上 我试过这个: System.setProperty("com.sun.net.httpserver.HttpServerProvider","org.mortbay.jetty.j2se6.JettyHttpServerProvider"); 但是当调用endpoint.publish(url)并生成服务器时,它会为org.mortbay.jetty.j2se6.JettyHttpSe

我正试图将Sun的HTTPServer换成更好的Jetty服务器,在一个OSGi包中,运行在Equinox上

我试过这个:

System.setProperty("com.sun.net.httpserver.HttpServerProvider","org.mortbay.jetty.j2se6.JettyHttpServerProvider");
但是当调用endpoint.publish(url)并生成服务器时,它会为org.mortbay.jetty.j2se6.JettyHttpServerProvider抱怨ClassNotFoundException

但是,正确的JAR在包中,实际上在Activator中,我可以实例化org.mortbay.jetty.j2se6.JettyHttpServerProvider

我认为这是一种类路径问题——生成的服务器可能位于不同的类路径中?我已经尝试在JDK级别添加JAR,但这没有任何区别

oanyone能解释一下到底该如何让它工作吗


另外,也许可怕的System.setProperty调用有一天会从世界上消失。希望:)

Equinox实现了由Jetty 6.x支持的OSGi标准HttpService。只需包含正确的包,就可以让Jetty在Equinox内轻松运行。然而,我发现a)Jetty对您完全隐藏,您所看到的只是HttpService接口,b)HttpService接口相当简单。您只能添加servlet+映射和一些静态资源

我似乎无法回复omerkudat,因此我不得不将回复放在这里

如果包含osgi jar,Metro似乎不会使用Jetty。你似乎需要这个:


我手动编译了它,并如上所述设置了系统属性,但没有成功。

问题是工厂没有OSGi意识,加载工厂的类没有引用Jetty实现。这不是它是否在您的包中(您似乎已将其组合在一个包中),而是工厂方法在某些核心代码中,并且无法解析Jetty

实例化HttpServer的调用不是Java6API的一部分,而是Sun的内部类之一,因此在非Sun JVM上运行时,此调用将失败。最好了解如何使用Metro来完成一些事情,而不是使用这个工厂方法来将类聚集在一起