Grails1.3.7からGrails2.2に移植しようとしているコードがいくつかあります。
現在の問題は、BaseController
いくつかの便利なメソッドを定義するクラスと、それを継承する特定のコントローラー(実際にはGrailsによってインスタンス化されたもの)があることです。
package com.fxpal.querium
import grails.converters.JSON
import groovy.lang.Closure;
abstract class BaseController {
protected def executeSafely(Closure c) {
def resp = null
try {
populateContext();
resp = c()
}
catch(Exception ex) {
resp = [error: ex.message]
ex.printStackTrace()
}
def json = resp as JSON
return json
}
protected void populateContext() {
}
}
派生クラスの例は次のとおりです。
package com.fxpal.querium
import grails.converters.JSON
import grails.plugins.springsecurity.Secured
import javax.servlet.http.HttpServletResponse
@Secured(['IS_AUTHENTICATED_REMEMBERED'])
class DocumentController extends BaseController {
def grailsApplication
@Secured(['IS_AUTHENTICATED_ANONYMOUSLY'])
def getText = {
try {
String text = new URL(grailsApplication.config.querium.docurl + params.paperId).text
render contentType: 'text/plain', text: text
}
catch(Exception ex) {
render contentType: 'text/plain', text: "Error loading document: ${ex.getMessage()}; please retry"
}
}
...
}
これはGrails1.3.7で機能しました。アプリをGrails2.2でコンパイルしようとすると、次のエラーが発生します。
C:\code\querium\AppServer-grails-2\grails-app\controllers\com\fxpal\querium\DocumentController.groovy: -1: The return ty
pe of java.lang.Object getGrailsApplication() in com.fxpal.querium.DocumentController is incompatible with org.codehaus.
groovy.grails.commons.GrailsApplication getGrailsApplication() in com.fxpal.querium.BaseController
. At [-1:-1] @ line -1, column -1.
このパターンはサポートされなくなりましたか?宣言に追加しようとしabstract
ましたがBaseController
(Grails 1.3.7では必要ありませんでした)、それは何の違いもなかったようです。それが重要な場合は、クリーンアップ後にコードをコンパイルしました。
PS:できる人へ:grails-2.2
タグを作成してください