简体   繁体   中英

How can I add Marvin Framework to a dynamic web project running on tomcat?

Marvin Framework is running perfectly in my Java project in Eclipse. I have copied the whole marvin folder to the project root folder, following the readme file. All good.

Now, when setting up the same app as dynamic web project in Eclipse and try to run it on Eclipses tomcat 9, I get a HTTP Status 500 – Internal Server Error caused by java.lang.ClassNotFoundException (see 'ERROR 1'below).

It seems, in a dynamic web project the jars should be in WEB-INF/lib. When copying marvin_1.5.5.jar to WEB-INF/lib the class marvin.image.MarvinImage is found correctly (ERROR 1 disappears).

But unfortunately the Marvin image plugins are not found. I have tried to copy the whole marvin folder to WEB-INF/lib - did not work. I got another HTTP Status 500 – Internal Server Error with java.lang.NullPointerException (see 'ERROR 2' below). I have tried to set the MarvinDefinitions.setImagePluginPath to myproject/WebContent/WEB-INF/lib/plugins/ - did not work. I got an error in the console: java.nio.file.NoSuchFileException: \myproject\WebContent\WEB-INF\lib\plugins\org.marvinproject.image.transform.scale.jar.

-> Does anyone know how to implement Marvin in a dynamic web project properly?

ERROR 1

HTTP Status 500 – Internal Server Error
Type Exception Report

Message Servlet execution threw an exception

Beschreibung The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Root Cause
java.lang.NoClassDefFoundError: marvin/image/MarvinImage
    controller.HomeController.doPost(HomeController.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Root Cause
java.lang.ClassNotFoundException: marvin.image.MarvinImage
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
    controller.HomeController.doPost(HomeController.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

ERROR 2

HTTP Status 500 – Internal Server Error
Type Exception Report

Beschreibung The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
java.lang.NullPointerException
    marvin.util.MarvinJarLoader.getClass(MarvinJarLoader.java:69)
    marvin.util.MarvinJarLoader.getObject(MarvinJarLoader.java:51)
    marvin.util.MarvinPluginLoader.loadPlugin(MarvinPluginLoader.java:55)
    marvin.util.MarvinPluginLoader.loadImagePlugin(MarvinPluginLoader.java:37)
    marvin.MarvinPluginCollection.checkAndLoadImagePlugin(MarvinPluginCollection.java:1225)
    marvin.MarvinPluginCollection.scale(MarvinPluginCollection.java:956)
    marvin.MarvinPluginCollection.scale(MarvinPluginCollection.java:973)
    controller.HomeController.doPost(HomeController.java:60)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

The problem with the way the Marvin zip distribution works is that it loads the JAR files at runtime as files. So you'll have to find out where the plugins were deployed. Retrieving a reference to the ServletContext and setting:

MarvinDefinitions.setImagePluginPath(servletContext.getRealPath("/WEB-INF/lib/plugins"));

might work if the WAR archive was unpacked to a directory (as Eclipse does). But it won't work in every situation.

A better solution is to download the Marvin jars ( MarvinFramework and MarvinPlugins ) from Maven and put them into your WEB-INF/lib folder (or add them as dependencies of the project if you are using Maven). In this distribution all the plugins will be already loaded and available through the static methods in the marvinplugins.MarvinPluginCollection class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM