在Google App Engine上阅读静态XML文件

时间:2011-07-18 19:32:56

标签: java google-app-engine

我的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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:11)

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

您在FileInputStream中指定的位置将被视为绝对位置,这就是您获得拒绝访问被拒绝的原因。

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

答案 1 :(得分:1)

您是否尝试过war/WEB-INF/StaticContent.xml而不是/war/WEB-INF/StaticContent.xml?可能是后者被解释为绝对路径,而实际上你不知道绝对路径是什么,因此需要相对路径。

答案 2 :(得分:0)

如果您的文件存储在war目录中,那么您可以在不指定文件路径中的项目名称的情况下访问它:

项目为       战争-          sample.json

然后使用路径访问文件as- FileReader fr = new FileReader(“war / sample.json”);

:)

答案 3 :(得分:-1)

我发现以下内容对我有用:

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