2010-06-13 135 views
1

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

//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) 

欢呼骗局

+0

您能告诉我们您的代码以阅读文件服务器端吗? – 2010-06-13 10:54:07

回答

1

我认为问题是,你想读不位于在工作目录中的文件。对于在GWT应用程序构建代码的guidlines如下

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

  • src文件夹 - 包含生产Java源
  • war文件夹 - 您的网页应用;包含静态资源以及编译输出
  • test文件夹 - (可选)JUnit测试的代码会去这里

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

File myFile = new File(System.getProperty("user.dir") + "/resources/myFile.xml"); 
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"); 

然后你就可以在你的解组使用的输入流。