さて、問題はxml自体を読むことではなく、それを使ってブートストラップすることにあることがわかりました.Service名をlovercaseに変更することが助けになりました。ReaderService を使用して、アドレスを含む xml ファイルを読み取り、アドレス オブジェクトを構築します。これが私のBootstrapコードです: `
class BootStrap {
def readService
def init = {
servletContext ->
def xml = readService.read()
println xml
def adress = new mobilmed.Adres(ulica:xml.adress.street, dom:xml.adress.house, miejscowość:xml.adress.residance, kodPocztowy:xml.adress.postCode, poczta:xml.adress.post).save()
if(adres.hasErrors()){
println adres.errors}
}
}
実行すると、古典的な「そのようなプロパティはありません」というエラーが発生しました。
| Error 2012-08-28 06:42:36,784 [pool-7-thread-1] ERROR context.GrailsContextLoader - Error executing bootstraps: No such property: adres for class: BootStrap
Message: No such property: adres for class: BootStrap
Line | Method
->> 10 | doCall in BootStrap$_closure1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 301 | evaluateEnvironmentSpecificBlock in grails.util.Environment
| 294 | executeForEnvironment . . . . . in ''
| 270 | executeForCurrentEnvironment in ''
| 303 | innerRun . . . . . . . . . . . . in java.util.concurrent.FutureTask$Sync
| 138 | run in java.util.concurrent.FutureTask
| 886 | runTask . . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
| 908 | run in ''
^ 662 | run . . . . . . . . . . . . . . in java.lang.Thread
もちろん、私はチェックしましたが、定義された変数のBoostrapingは次のようにうまく機能します:
def karolzam = new mobilmed.Adres(ulica:"Turkusowa", dom:"8/22", miejscowość:"Lublin", kodPocztowy:"20-572", poczta:"Lublin").save()
if(karolzam.hasErrors()){
println karolzam.errors}
ブートストラップは、コンソールに出力できる変数を「認識」していないようです。:/