0

我正在尝试在 OpenIG 上实现我自己的过滤器/处理程序版本。

我在 Eclipse 上创建了它自己的 maven 项目,编译了示例并将其打包到一个 jar 中。

我在 Jetty 8 上运行 OpenIG 2.1.0。

openig 战争部署在 $JETTY_HOME/webapps 下,而我创建的 jar 在 $JETTY_HOME/lib/ext 下。

我面临的例外是 NoClassDefFound 我的过滤器扩展的 GenericFilter 类。GenericFilter 存在于 openig 战争中,作为“内联”jar

我知道这是类加载的问题。Plugin Jar 和 OpenIG 战争不共享同一个类加载器。

我的问题是:什么形式的包装适合这种情况?

  1. 我可以用我的新班级重建战争 - 似乎不合逻辑,应该将战争和插件脱钩
  2. 我可以将插件包装为战争 - 仍然没有意义。
  3. 使用 OSGI - 方式过大,openIG 不是 OSGI 包

有任何想法吗 ?

java.lang.NoClassDefFoundError: org/forgerock/openig/filter/GenericFilter
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424)
 at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:264)
 at org.forgerock.openig.util.JsonValueUtil.classForName(JsonValueUtil.java:80)
 at org.forgerock.openig.util.JsonValueUtil.asClass(JsonValueUtil.java:94)
 at org.forgerock.openig.heap.HeapImpl.init(HeapImpl.java:64)
 at org.forgerock.openig.federation.FederationGatewayServlet.init(FederationGatewayServlet.java:67)
 at javax.servlet.GenericServlet.init(GenericServlet.java:244)
 at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:456)
 at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:347)
 at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:535)
 at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:489)
 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
 at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
 at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
 at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:972)
 at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
 at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
 at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:906)
 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
 at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
 at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
 at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
 at org.eclipse.jetty.server.Server.handle(Server.java:350)
 at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442)
 at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:910)
 at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565)
 at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
 at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46)
 at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545)
 at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43)
 at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
 at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
 at java.lang.Thread.run(Thread.java:722)
Caused by:
java.lang.ClassNotFoundException: org.forgerock.openig.filter.GenericFilter
 at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424)
 at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:264)
 at org.forgerock.openig.util.JsonValueUtil.classForName(JsonValueUtil.java:80)
 at org.forgerock.openig.util.JsonValueUtil.asClass(JsonValueUtil.java:94)
 at org.forgerock.openig.heap.HeapImpl.init(HeapImpl.java:64)
 at org.forgerock.openig.federation.FederationGatewayServlet.init(FederationGatewayServlet.java:67)
 at javax.servlet.GenericServlet.init(GenericServlet.java:244)
 at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:456)
 at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:347)
 at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:535)
 at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:489)
 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
 at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
 at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
 at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:972)
 at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
 at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
 at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:906)
 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
 at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
 at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
 at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
 at org.eclipse.jetty.server.Server.handle(Server.java:350)
 at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442)
 at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:910)
 at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565)
 at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
 at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46)
 at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545)
 at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43)
 at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
 at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
 at java.lang.Thread.run(Thread.java:722)C
4

1 回答 1

0

战争中的类在加载时对 lib 目录中的类不可用。听起来您想运行 OpenIG 并在他们的 WAR 中包含一些自定义部分。如果您使用的是 Maven,则可以使用Maven WAR Plugin 和 Overlays来执行此操作。覆盖允许您将代码添加到现有的 WAR 以创建新的战争。

于 2012-11-18T22:24:45.510 回答