gwt文件权限

时间:2010-06-13 09:51:09

标签: file gwt

我有一个使用RPC的GWT / AppEngine项目。基本上我需要从驻留在服务器上的XML文件中获取一些数据。但是当我使用RPC来读取我的服务器包中的文件时,我得到了AccessControlException (access denied)。任何想法是什么问题?

//JAXB powered XML Parser
public PoiList readXML() {
    try {

        unmarshaller = jaxbContext.createUnmarshaller();
        unmarshaller.setEventHandler(new XMLValidEventHandler());
        db = (PoiList) unmarshaller.unmarshal(new File("src/com/sem/server/source.xml"));


    } catch (JAXBException e) {
        e.printStackTrace();
    }               
    return db;
}

java.security.AccessControlException: access denied (java.io.FilePermission \WEB-INF\classes\com\sem\server read)
欢呼声恶作剧

2 个答案:

答案 0 :(得分:1)

我认为问题在于您正在尝试读取不在工作目录中的文件。在gwt应用程序中构建代码的指导原则如下

  

在主项目目录下   创建以下目录:

     
      
  • src文件夹 - 包含生产Java源代码
  •   
  • war文件夹 - 您的网络应用;包含静态资源以及编译输出
  •   
  • 测试文件夹 - (可选)JUnit测试代码将在此处
  •   

尝试将文件移动到war目录(例如/war/resources/myFile.xml),然后通过

打开它
File myFile = new File(System.getProperty("user.dir") + "/resources/myFile.xml");

答案 1 :(得分:0)

通常,当您加载位于类路径中的资源时,不应使用java.io.File。为什么?因为它很可能,没有真正的文件 - 这些类通常打包为.jar文件,甚至以完全不同的方式加载(很可能是在AppEngine的情况下,虽然我不知道细节。)

因此,如果要直接从类路径加载它,可以使用:

ClassLoader classLoader = 
        getClass().getClassLoader(); // Or some other way to
                                     // get the correct ClassLoader
InputStream is = classloader.getResourceAsStream("/com/sem/server/source.xml");

然后您可以在unmarshaller中使用输入流。