Как мне инициализировать класс freemarker.template.Configuration? - PullRequest
3 голосов
/ 27 сентября 2010

Попытка следовать этому руководству по Java .

Приблизительно на 63 страницах вы узнаете, как создать форму ("New.jsp") для отправки новых событий.

Когда я пытаюсь посетить страницу, я получаю следующую ошибку:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Filter execution threw an exception
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause

java.lang.NoClassDefFoundError: Could not initialize class freemarker.template.Configuration
    org.apache.struts2.views.freemarker.FreemarkerManager.createConfiguration(FreemarkerManager.java:294)
    org.apache.struts2.views.freemarker.FreemarkerManager.init(FreemarkerManager.java:255)
    org.apache.struts2.views.freemarker.FreemarkerManager.getConfiguration(FreemarkerManager.java:238)
    org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:734)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:506)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.

Apache Tomcat/6.0.29

Я нашел этот журнал в D: \ education \ java.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ logs \ localhost_access_log.2010-09-26.txt

127.0.0.1 - - [26/Sep/2010:04:29:09 +0200] "GET / HTTP/1.1" 404 953
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:29:11 +0200] "GET /Events/ HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:29:11 +0200] "GET /favicon.ico HTTP/1.1" 404 986
127.0.0.1 - - [26/Sep/2010:04:56:53 +0200] "GET / HTTP/1.1" 404 953
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/events/Listing.action HTTP/1.1" 200 963
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/styles.css HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/bg.jpg HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/alpha-b.png HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/alpha-w.png HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /favicon.ico HTTP/1.1" 404 986
0:0:0:0:0:0:0:1 - - [26/Sep/2010:05:02:49 +0200] "GET /Events/ HTTP/1.1" 404 974
0:0:0:0:0:0:0:1 - - [26/Sep/2010:05:02:49 +0200] "GET /favicon.ico HTTP/1.1" 404 986

Не удалось найти другие журналы.

Есть идеи, как решить эту проблему?

Ответы [ 4 ]

5 голосов
/ 27 сентября 2010

NoClassDefFound означает, что определение класса существовало во время компиляции , но во время выполнения определение либо не найдено, либо не совпадает с версией .

В вашем случае, я думаю, это может быть проблема нескольких версий freemarker.template.Configuration, найденных в пути к классам. В идеале нужно быть только в freemarker.jar, но проверьте, есть ли у вас один из этих jar на вашем сервере / lib и удалите все дубликаты

Если ни один из них, убедитесь, что нет никаких других версий freemarker.jar, кроме вашей войны

Обновлено решение, обнаруженное в комментариях

Переименование дубликата freemarker.jar в .bak не помогает, работает, когда те переместились за пределы пути / classpath

0 голосов
/ 11 марта 2014

Просто поместите файлы jar в папку WEB-INF / lib, и это все ...

0 голосов
/ 27 сентября 2010

Загляните в свои журналы и загрузите их. Они должны быть в такой папке:

<<eclipse_workspace>>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\logs
0 голосов
/ 27 сентября 2010

Javadoc для java.lang.NoClassDefError говорит:

Брошен, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как частьобычного вызова метода или как часть создания нового экземпляра с использованием нового выражения), и определение класса не может быть найдено.

Искали определение класса, существовавшее при компиляции текущего исполняемого класса, ноопределение больше не может быть найдено.

То есть, Struts пытается делегировать рендеринг представления freemarker, но freemarker отсутствует в пути к классам.Попытайтесь выяснить, какая версия freemarker требуется для вашей версии Struts, и добавьте эту версию freemarker.jar в путь к классам.

...