2012-06-13 52 views
0

我試圖切換到使用app.yaml而不是web.xml和app-engine-web.xml。我已經嘗試按照文檔忠實,但我從appconfig.cmd update <my-war-directory>得到一個錯誤,說當爲處理程序指定servlet時,爲GAE/Java解析app.yaml時出錯

Reading application configuration data... 
Bad configuration: Line 18, column 13: Error setting property 'handlers' on class: com.google.apphosting.utils.config.AppYaml 
    Caused by: Line 18, column 13: Error setting property 'handlers' on class: com.google.apphosting.utils.config.AppYaml 
Please see the logs [C:\Users\<blah blah>\appcfg3710135744474388957.log] for further information. 

在指定的日誌文件中,我看到一個堆棧轉儲行:

com.google.appengine.repackaged.net.sourceforge.yamlbeans.tokenizer.Tokenizer$TokenizerException: Line 18, column 13: Found a mapping value where it is not allowed. 

下面是我的文件(行號手動添加):

1 application: my-app 
2 version: 1 
3 runtime: java 
4 threadsafe: true 
5 
6 public_root: /static 
7 
8 static_files: 
9 - include: /** 
10 
11 welcome_files: 
12 - index.html 
13 
14 system_properties: 
15 java.util.logging.config.file: WEB-INF/logging.properties 
16 
17 handlers: 
18 - url: /user/* 
19  servlet: org.restlet.ext.servlet.ServerServlet 
20  name: user 
21  init_params: 
22  org.restlet.application: com.my-app.server.resource.user.UserApplication 
23  org.restlet.clients: HTTP HTTPS 

與試驗後,一些YAML網絡上的驗證器,其實我覺得是抱怨19行,其中列13點指向「servlet」後面的「:」字符。但這種用法看起來與https://developers.google.com/appengine/docs/java/configyaml/appconfig_yaml#Required_Elements

我知道我在做一些愚蠢的文件完全一致,但我很爲難。

+0

呃。在懷疑一些看不見的與空白有關的問題後,我決定再次從頭開始輸入它,並且它工作。然後,與之前的版本相比,我確定問題是由於「servlet」這一行縮進了一個額外的空間。它需要在它上面的「url」中的「u」下排隊。我猜如果我對YAML更熟悉,這可能是顯而易見的,但作爲YAML noob,錯誤沒有幫助。另外,我遵循的developers.google.com上的示例有令人不快的縮進。 –

+0

出於好奇,你爲什麼要切換到.yaml? –

+0

@ DaveW.Smith在閱讀了這篇文章後,它看起來更清晰和更緊湊(在我​​的應用程序中,61行app.yaml替換了大約150行的組合web.xml和appengine-web.xml),所以我我以爲我會試試看。 –

回答

0

正如我上面提到的,罪魁禍首是第19-21行的縮進 - 他們需要在第18行的「url」中的「u」下排隊。

0

謝謝您的好評AndyD!文檔已更新以解決有問題的示例代碼。

對於我來說,它也使用一些YAML驗證檢查YAML文件非常方便。例如: http://data-lint.herokuapp.com/

感謝。

+0

這太好了,謝謝修復文檔。我不確定在哪裏報告。 –

相關問題