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

use*_*066 9 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)
Run Code Online (Sandbox Code Playgroud)

我尝试将文件直接放在战争和war/WEB-INF目录中,问题仍然存在.服务器上的尝试读取文件就像这样简单:

final FileInputStream fis = new FileInputStream("/war/WEB-INF/StaticContent.xml");
Run Code Online (Sandbox Code Playgroud)

根据这篇文章,我正在做的一切正确:http: //code.google.com/appengine/kb/java.html#readfile

任何帮助都感激不尽.

Kal*_*Kal 11

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

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

ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/StaticContent.xml");
Run Code Online (Sandbox Code Playgroud)

  • 如何在端点类中访问它,因此无法访问上下文? (2认同)

Chr*_*nch 1

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