2011-07-18 38 views
9

我的App Engine應用程序中有一個靜態XML文件,上傳就很好,我試圖讀取它的一些基於規則的執行邏輯,但下面的錯誤是在我身上:閱讀谷歌App Engine上的靜態XML文件

Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /war/WEB-INF/StaticContent.xml read) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393) 
    at java.security.AccessController.checkPermission(AccessController.java:553) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166) 
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888) 
    at java.io.FileInputStream.<init>(FileInputStream.java:130) 
    at java.io.FileInputStream.<init>(FileInputStream.java:96) 

我試圖將文件直接放在戰爭和war/WEB-INF目錄中,問題仍然存在。該服務器上試圖讀取該文件是如此簡單:

final FileInputStream fis = new FileInputStream("/war/WEB-INF/StaticContent.xml"); 

根據這篇文章,我做正確的一切: http://code.google.com/appengine/kb/java.html#readfile

任何幫助將非常感激。

回答

1

您是否試過從war/WEB-INF/StaticContent.xml而不是/war/WEB-INF/StaticContent.xml讀取?可能後者被解釋爲絕對路徑,實際上你不知道絕對路徑是什麼,因此想要相對路徑。

+0

拋出另一個錯誤,這個問題似乎是路徑,看看這個帖子:https://groups.google的.com /論壇/嵌入/?地點=論壇/谷歌應用服務引擎的Java&showsearch =真showpopout =真parenturl = HTTP%3A%2F%2Fcode.google.com%2Fappengine%2Fforum%2Fjava-forum.html%3Fplace%3Dforum%2Fgoogle- appengine-java#!searchin/google-appengine -java/read $ 20static $ 20file/google-appengine-java/ltgp3DuTx7M/h8GCC9yMD4AJ – user583066

11

使用getResourceAsStream而不是直接打開FileInputStream。

您在FileInputStream中指定的位置被視爲絕對位置,這就是爲什麼您會遇到拒絕訪問異常的原因。

ServletContext context = getServletContext(); 
InputStream is = context.getResourceAsStream("/WEB-INF/StaticContent.xml"); 
+0

我用.getRealPath代替.getResourceAsStream,它工作正常。 – user583066

+2

如何在端點類中訪問它,所以上下文不可訪問? –

+0

ServletContext可以在端點方法中訪問。您可以將ServletContext添加爲參數,並且框架將自動注入它。 –

0

如果你的文件存儲在戰爭目錄,那麼你可以訪問,如果沒有在指定的文件路徑項目名稱:

項目 - 受戰爭 sample.json

然後訪問文件,路徑 - FileReader fr = new FileReader(「war/sample.json」);

:)

-1

我發現下面的工作對我來說:

InputStream feedStream = new FileInputStream("WEB-INF/" + fileName); 
+0

它導致:AccessControlException:訪問被拒絕(「java.io.FilePermission」「/ WEB-INF/emails/activation_template」「read」) –