2011-04-19 47 views
2

我正在通過Scala blog engine tutorial(yabe)進行遊戲!框架和我遇到了模板執行錯誤,當訪問註釋時引用GenericSignatureFormatError : null。具體而言,錯誤頁面如下所示:Play中的GenericSignatureFormatError! Scala博客示例

Template execution error 
Execution error occured in template /app/views/tags/display.html. 
Exception raised was GenericSignatureFormatError : null. 

In /app/views/tags/display.html (around line 14)  
(14)  |  ${_arg?.comments.size() ?: 'no'} 
This exception has been logged with id 666i6ifgg 

控制檯的堆棧跟蹤如下。我可以從github上主(43b195)內samples-and-tests/重現該問題,如下:

% git clone https://github.com/playframework/play-scala.git 
% cd play-scala/samples-and-tests/yabe 
% play dependencies 
~ play! 1.2, http://www.playframework.org 
~ Resolving dependencies using /home/league/tmp/play-scala/samples-and-tests/yabe/conf/dependencies.yml, 
~ play->scala 0.9 (from playLocalModules) 
~ Installing resolved dependencies, 
~ modules/scala-0.9 -> /usr/local/stow/play-1.2/share/play-1.2/modules/scala-0.9 
~ lib/joda-time-1.6.jar 
~ Done! 
% play run 
~ play! 1.2, http://www.playframework.org 
~ Warning: conflict on command scala:console 
~ Ctrl+C to stop 
Listening for transport dt_socket at address: 8000 
10:32:01,076 INFO ~ Starting /home/league/tmp/play-scala/samples-and-tests/yabe 
10:32:01,079 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.scala) 
10:32:01,080 INFO ~ Module scala is available (/home/league/tmp/play-scala/samples-and-tests/yabe/../..) 
10:32:01,080 INFO ~ Module scala is available (/usr/local/stow/play-1.2/share/play-1.2/modules/scala-0.9) 
10:32:02,515 WARN ~ You're running Play! in DEV mode 
10:32:02,591 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ... 

然後,加載http://localhost:9000/產生上述錯誤,與此控制檯輸出:

@666i6ifgg 
Internal Server Error (500) for request GET/

Template execution error (In /app/views/tags/display.html around line 14) 
Execution error occured in template /app/views/tags/display.html. Exception raised was GenericSignatureFormatError : null. 

play.exceptions.TemplateExecutionException 
    at play.templates.BaseTemplate.throwException(BaseTemplate.java:84) 
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:236) 
    at play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:346) 
    at /app/views/Application/index.html.(line:6) 
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:213) 
    at play.templates.Template.render(Template.java:26) 
    at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24) 
    at play.mvc.Controller.renderTemplate(Controller.java:657) 
    at play.mvc.ControllerDelegate.renderTemplateForScala(ControllerDelegate.java:46) 
    at play.mvc.results.Template.<init>(Template.scala:12) 
    at play.mvc.ScalaController.Template(ScalaController.scala:77) 
    at controllers.Application$.index(app/controllers.scala:27) 
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:540) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:498) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:492) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:469) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:157) 
    at Invocation.HTTP Request(Play!) 
Caused by: java.lang.reflect.GenericSignatureFormatError 
    at java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:385) 
    at java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:116) 
    at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:74) 
    at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:58) 
    at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1196) 
    at java.beans.Introspector.getBeanInfo(Introspector.java:423) 
    at java.beans.Introspector.getBeanInfo(Introspector.java:189) 
    at java.beans.Introspector.getBeanInfo(Introspector.java:250) 
    at java.beans.Introspector.<init>(Introspector.java:404) 
    at java.beans.Introspector.getBeanInfo(Introspector.java:189) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at /app/views/tags/display.html.(line:14) 
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:213) 
    ... 16 more 
+0

這個問題似乎是List模板對象。像'$ {posts}'這樣的東西將用toString打印List,但是這些失敗:'$ {posts [0]}或'$ {posts.size()}或'#{if posts}' – chrisleague 2011-04-19 16:25:01

回答

2

我能夠通過切換到Sun JDK來解決此問題。我沒有意識到我的Ubuntu被設置爲使用OpenJDK。 installation guide聲稱任何人都應該工作。也許這是不真實的,或者我不幸遇到了與此版本的OpenJDK相關的特定錯誤。

對於有此問題的其他人,update-java-alternatives -l顯示可用的JDK;我看到:

java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk 
java-6-sun 63 /usr/lib/jvm/java-6-sun 

這些來自Ubuntu的軟件包

sun-java6-bin   6.24-1build0.10.10.1 
openjdk-6-jre-headless 6b20-1.9.7-0ubuntu1 

使用此功能選擇:

update-java-alternatives -s java-6-sun 
0

嘗試改變這:

${_arg?.comments.size() ?: 'no'} 

${(_arg?.comments.size() > 0) ? '': 'no'} 

這應該起作用。

+1

不幸的是, 。這似乎是一個更深層次的問題。如果我將該行註釋掉,下一次出現'_arg?.comments'會觸發相同的錯誤。如果我將它們全部刪除,它會出現在代碼##{if if older}'' – chrisleague 2011-04-19 15:33:30

+0

上的另一個模板中。當然,這只是包含在發行版中的演示模板,在這裏:https://github.com/playframework/play -scala/tree/master/samples-and-tests/yabe/app/views。所以它在'Application/index.html'中調用的'tags/display.html'中崩潰。 – chrisleague 2011-04-19 16:37:21