plantuml / plantuml-server

PlantUML Online Server
https://plantuml.com/
GNU General Public License v3.0
1.6k stars 463 forks source link

compare recent changes #203

Closed MarcoSchaar closed 2 years ago

MarcoSchaar commented 2 years ago

dear supporting team, with update to 1.2021.13 and 1.2021.14 something got changed compared to 1.2021.12 that prevent application from starting in unchanged environment. what needs to be done to get updated versions to run?

arnaudroques commented 2 years ago

I guess that you are talking about the WAR file which does not start anymore in your J2EE server. It's difficult to help you without any logs or further information.

MarcoSchaar commented 2 years ago

at the moment I make use of plantuml-v1.2021.14.war

some logs are available

SEVERE [http-nio-8080-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet [plantumlservlet] java.lang.ClassNotFoundException: jakarta.servlet.http.HttpServlet at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215) at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2478) at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:870) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1371) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:538) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:519) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1070) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:788) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:128) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:829)

arnaudroques commented 2 years ago

It kooks like an issue about the version of tomcat you are using. https://stackoverflow.com/questions/28325329/java-lang-noclassdeffounderror-javax-servlet-http-httpservlet https://stackoverflow.com/questions/57346981/how-to-fix-classnotfoundexception-javax-servlet-http-httpfilter

Maybe you should try with a newer version ?

MarcoSchaar commented 2 years ago

making use tomcat 9.0.54

Server version: Apache Tomcat/9.0.54 Server number: 9.0.54.0

JVM Version: 11.0.13+8 openjdk 11.0.13 2021-10-19 OpenJDK Runtime Environment 18.9 (build 11.0.13+8) OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8, mixed mode)

MarcoSchaar commented 2 years ago

hi @arnaudroques while using updated tomcat

Server version: Apache Tomcat/9.0.55
Server built:   Nov 10 2021 08:26:45 UTC
Server number:  9.0.55.0
OS Name:        Linux
OS Version:     4.19.128-microsoft-standard
Architecture:   amd64
JVM Version:    11.0.13+8

and latest version plantuml-jsp-v1.2021.15.war

I get the following error:

SEVERE [http-nio-8080-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet [plantumlservlet]
        java.lang.ClassCastException: class net.sourceforge.plantuml.servlet.PlantUmlServlet cannot be cast to class javax.servlet.Servlet (net.sourceforge.plantuml.servlet.PlantUmlServlet is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @52de51b6; javax.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @66480dd7)
                at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1070)
                at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:788)
                at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:128)
                at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
                at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
                at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
                at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
                at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
                at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
                at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
                at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
                at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
                at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
                at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
                at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
                at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
                at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.base/java.lang.Thread.run(Thread.java:829)

any hints for troubleshooting?

arnaudroques commented 2 years ago

I'm not sure, but perhaps this https://github.com/plantuml/plantuml-server/pull/198 add a dependency on Tomcat 10. (Same error here)

@HeinrichAD Any idea on this ?

MarcoSchaar commented 2 years ago

Hi @arnaudroques thanks for this hint. updated tomcat to version 10 and it works

HeinrichAD commented 2 years ago

Glad to hear that the problem has already been solved. :smiley:

arnaudroques commented 2 years ago

Glad to hear that the problem has already been solved. smiley

Sure!

However, on our side, I don't see why it should not work on tomcat 9.

Since @MarcoSchaar is talking about some file plantuml-jsp-v1.2021.15.war which is not built by this repository, I am wondering if the dependency on tomcat 10 is added by their built, not ours.

@HeinrichAD Any thought ?

HeinrichAD commented 2 years ago

Why is it not built by this repository? releases

Also see Important changes which may need further discussion > war generation from #198

Also with Tomcat 10 and Jetty 11 they changes their bases classes from javax.servlet to jakarta.servlet. To be more precise, the package has been renamed and will continue to be developed under this name. I suspect this is also the problem. (But this is just a guess right now.)

arnaudroques commented 2 years ago

Also with Tomcat 10 and Jetty 11 they changes their bases classes from javax.servlet to jakarta.servlet.

Of course, you're right :facepalm: This is the real cause of the issue.

HeinrichAD commented 2 years ago

@arnaudroques Maybe we should add this to the Requirements section inside the README?

Edit: But is it really a requirements? Maybe just as a hint below the requirements section?

arnaudroques commented 2 years ago

Edit: But is it really a requirements? Maybe just as a hint below the requirements section?

Let's say it's a recommended requirement :-)

Would you mind update the README ? Thanks!

fengkaijia commented 2 years ago

Also with Tomcat 10 and Jetty 11 they changes their bases classes from javax.servlet to jakarta.servlet.

So it's now impossible to run the WAR on Jetty 9 because of this? any workarounds other than manually installing Jetty 11 as Linux distros don't ship Jetty 11, there's only jetty9 package on Debian/Ubuntu (across all versions).

tacerus commented 1 year ago

Encountered the same issue with Tomcat 9, which is widely shipped with distributions. Using the binary release of Tomcat 10 made it work.