Я работаю над 1.2 Play! приложение Framework, и у меня возникла проблема при его развертывании в качестве WAR на Tomcat 6.
На одной странице моего приложения отображается список информации.
Эта информация извлекается из файла .yml
.
Итак, у меня есть контроллер, который генерирует Iterable<Object>
из этого .yml
файла, например:
public static void myFunction() {
Constructor constructor = new Constructor(MyClass.class); // org.yaml.snakeyaml.constructor.Constructor
constructor.addTypeDescription(new TypeDescription(MyClass.class));
Yaml yaml = new Yaml(constructor);
Iterable<Object> listOfInfo = yaml.loadAll(Application.class.getResourceAsStream("/my-file.yml"));
render("Application/my-page.html", listOfInfo);
}
Важным моментом является то, что MyClass
находится в пакете app/my/company/my-app/
(my.company.my-app.MyClass
).
Когда я запускаю приложение, используя play run
, проблем не возникает.
Теперь я создаю пакет WAR (используя play war -o some/dir --zip
) и устанавливаю этот сгенерированный WAR на Tomcat (6.0).
Когда сервер запущен и я пытаюсь получить доступ к соответствующей странице, я получаю следующую ошибку:
@683lh76fn
Internal Server Error (500)
Template execution error (In /app/views/Application/my-page.html around line 9)
Execution error occured in template /app/views/Application/my-page.html. Exception raised was ConstructorException : null; Can't construct a java object f
or tag:yaml.org,2002:my.company.my-app.MyClass; exception=Class not found: my.company.my-app.MyClass.
play.exceptions.TemplateExecutionException: null; Can't construct a java object for tag:yaml.org,2002:my.company.my-app.MyClass; exception
=Class not found: my.company.my-app.MyClass
at play.templates.BaseTemplate.throwException(BaseTemplate.java:84)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:252)
at play.templates.Template.render(Template.java:26)
at play.templates.GroovyTemplate.render(GroovyTemplate.java:184)
at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
at play.mvc.Controller.renderTemplate(Controller.java:659)
at play.mvc.Controller.renderTemplate(Controller.java:639)
at play.mvc.Controller.render(Controller.java:694)
at controllers.Application.myFunction(Application.java:311)
Если я посмотрю взорвавшуюся войну, то увижу, что my.company.my-app.MyClass
находится в каталоге WEB-INF/application/precompiled/java/my/company/my-app/
.
Если я переместу этот каталог в WEB-INF/classes
, я больше не получу эту ошибку.
Почему возникает эта ошибка? Какие у меня есть варианты, чтобы он работал (без изменения вручную WAR)?