Skip to content

Commit

Permalink
OF-2717: Documenting the errors observed in plugins due to the Jetty …
Browse files Browse the repository at this point in the history
…12 EE 8 upgrade. Information is also provided on the potential solutions to those errors.
  • Loading branch information
“Huy authored and guusdk committed Nov 13, 2024
1 parent cd86f47 commit 52e8856
Showing 1 changed file with 250 additions and 0 deletions.
250 changes: 250 additions & 0 deletions documentation/plugins-affected-by-jetty12-upgrade.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Openfire: Overview</title>
<link type="text/css" rel="stylesheet" href="style.css">
<style>
dl {
display: unset;
}
dt {
margin-left: 4em;
}
dd {
margin-left: 6em;
margin-bottom: 1.5em;
}
</style>
</head>
<body>

<article>

<header>
<img src="images/header_logo.gif" alt="Openfire Logo" />
<h1>Plugins Affected by Jetty 12 Upgrade</h1>
</header>

<h2>Overview</h2>
<p>
Openfire's upgrade to Jetty 12, using EE8 packages, is known to affect 16 plugins. Five types of errors have been identified across the affected plugins. The table below lists the plugins and the types of errors they are experiencing:
</p>

<section id="broken-plugins-list">

<table class="compliance">
<tbody>
<tr>
<th colspan="2">Broken Plugin Information</th>
</tr>
<tr>
<th>Plugin Name</th>
<th>Error Type</th>
</tr>
<tr>
<td>Candy</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>Fastpath Service</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>Galene</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>Gitea</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/security/ConstraintSecurityHandler</td>
</tr>
<tr>
<td>HTTP File Upload</td>
<td>java.lang.VerifyError: Bad type on operand stack</td>
</tr>
<tr>
<td>inVerse</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>IPFS</td>
<td>java.lang.NoSuchMethodError: 'java.lang.String org.jivesoftware.util.JiveGlobals.getHomeDirectory()</td>
</tr>
<tr>
<td>JSXC</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>Monitoring Service</td>
<td>java.lang.VerifyError: Bad type on operand stack</td>
</tr>
<tr>
<td>NodeJs</td>
<td>java.lang.NoSuchMethodError: 'java.lang.String org.jivesoftware.util.JiveGlobals.getHomeDirectory()</td>
</tr>
<tr>
<td>Ohun</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/security/ConstraintSecurityHandler</td>
</tr>
<tr>
<td>Openfire WebSocket</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/websocket/servlet/WebSocketServlet</td>
</tr>
<tr>
<td>osw-openfire-plugin</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>Pade</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/websocket/server/JettyWebSocketCreator</td>
</tr>
<tr>
<td>Random Avatar Generator Plugin</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
<tr>
<td>xmppweb</td>
<td>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext</td>
</tr>
</tbody>

</table>

</section>

<h2>Error Details and Potential Solutions</h2>
<p>
This section provides further details on the five types of errors observed and offers suggestions for addressing them.
</p>

<h3>java.lang.VerifyError</h3>
<section id="verify-error">
<fieldset>
<legend>Error found in openfire.log</legend>
<pre><code>java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
org/eclipse/jetty/servlet/ServletContextHandler.setGzipHandler(Lorg/eclipse/jetty/server/handler/gzip/GzipHandler;)V @6: invokespecial
Reason:
Type 'org/eclipse/jetty/server/handler/gzip/GzipHandler' (current frame, stack[2]) is not assignable to 'org/eclipse/jetty/server/handler/HandlerWrapper'
Current Frame:
bci: @6
flags: { }
locals: { 'org/eclipse/jetty/servlet/ServletContextHandler', 'org/eclipse/jetty/server/handler/gzip/GzipHandler' }
stack: { 'org/eclipse/jetty/servlet/ServletContextHandler', 'org/eclipse/jetty/server/handler/gzip/GzipHandler', 'org/eclipse/jetty/server/handler/gzip/GzipHandler' }
Bytecode:
0000000: 2a2a b400 352b b700 762a 2bb5 0035 2ab7
0000010: 0018 b1
at org.jivesoftware.openfire.plugin.MonitoringPlugin.loadPublicWeb(MonitoringPlugin.java:279) ~[monitoring-2.6.1.jar:?]
at org.jivesoftware.openfire.plugin.MonitoringPlugin.initializePlugin(MonitoringPlugin.java:186) ~[monitoring-2.6.1.jar:?]
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java:640) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:380) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:368) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
</code></pre>
</fieldset>
<p>Consider using <a href="https://javadoc.jetty.org/jetty-12/org/eclipse/jetty/server/Handler.Wrapper.html">org.eclipse.jetty.server.Handler.Wrapper</a> to replace org.eclipse.jetty.server.handler.HandlerWrapper.</p>
</section>

<h3>org.eclipse.jetty.webapp.WebAppContext</h3>
<section id="web-app-context">
<fieldset>
<legend>Error found in openfire.log</legend>
<pre><code>java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext
at org.igniterealtime.openfire.plugin.inverse.InversePlugin.initializePlugin(InversePlugin.java:63) ~[inverse-10.1.7.1.jar:?]
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java:640) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:380) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:368) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.webapp.WebAppContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:592) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
... 8 more
</code></pre>
</fieldset>
<p>Consider using the EE8 WebAppContext from org.eclipse.jetty.ee8.webapp.WebAppContext to replace org.eclipse.jetty.webapp.WebAppContext.</p>
</section>

<h3>org.jivesoftware.util.JiveGlobals.getHomeDirectory()</h3>
<section id="get-home-directory">
<fieldset>
<legend>Error found in openfire.log</legend>
<pre><code>java.lang.NoSuchMethodError: 'java.lang.String org.jivesoftware.util.JiveGlobals.getHomeDirectory()'
at org.ifsoft.ipfs.openfire.PluginImpl.initializePlugin(PluginImpl.java:74) ~[ipfs-native.jar:?]
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java:640) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:380) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:368) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
</code></pre>
</fieldset>
</section>

<h3>org/eclipse/jetty/security/ConstraintSecurityHandler</h3>
<section id="constraint-security-handler">
<fieldset>
<legend>Error found in openfire.log</legend>
<pre><code>java.lang.NoClassDefFoundError: org/eclipse/jetty/security/ConstraintSecurityHandler
at java.lang.Class.getDeclaredConstructors0(Native Method) ~[?:?]
at java.lang.Class.privateGetDeclaredConstructors(Class.java:3373) ~[?:?]
at java.lang.Class.getConstructor0(Class.java:3578) ~[?:?]
at java.lang.Class.newInstance(Class.java:626) ~[?:?]
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java:587) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:380) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:368) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.security.ConstraintSecurityHandler
at java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:592) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
... 11 more
</code></pre>
</fieldset>
<p>Consider using the EE8 ConstraintSecurityHandler from org.eclipse.jetty.ee8.security.ConstraintSecurityHandler to replace org.eclipse.jetty.security.ConstraintSecurityHandler.</p>
</section>

<h3>org/eclipse/jetty/websocket/server/JettyWebSocketCreator</h3>
<section id="jetty-websocket-creator">
<fieldset>
<legend>Error found in openfire.log</legend>
<pre><code>java.lang.NoClassDefFoundError: org/eclipse/jetty/websocket/server/JettyWebSocketCreator
at uk.ifsoft.openfire.plugins.pade.PadePlugin.initializePlugin(PadePlugin.java:117) ~[pade-1.8.3.jar:?]
at org.jivesoftware.openfire.container.PluginManager.loadPlugin(PluginManager.java:640) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:380) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at org.jivesoftware.openfire.container.PluginMonitor$MonitorTask$4.call(PluginMonitor.java:368) [xmppserver-4.10.0-SNAPSHOT.jar:4.10.0-SNAPSHOT]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.JettyWebSocketCreator
at java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:592) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
... 8 more
</code></pre>
</fieldset>
<p>Consider using the EE8 JettyWebSocketServlet from org.eclipse.jetty.ee8.websocket.server.JettyWebSocketServlet to replace org.eclipse.jetty.websocket.server.JettyWebSocketCreator.</p>
</section>

<footer>
<p>
An active support community for Openfire is available at
<a href="https://discourse.igniterealtime.org">https://discourse.igniterealtime.org</a>.
</p>
</footer>

</article>

</body>
</html>

0 comments on commit 52e8856

Please sign in to comment.