2010-06-13 119 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"); 

然後你就可以在你的解組使用的輸入流。