2011-05-26 25 views
5

我想在Google appengine中使用一個小型圖書館;其中一個類別的其中一種方法(如MyClass.writeToFile())使用java.io.FileOutputStream,這是列入黑名單的類別(當然不是white-listed)。如果未找到引用的Java類或將其列入黑名單,那麼何時檢測到該類?

這是否意味着MyClass將在類加載時失敗,或者只是(如果)我嘗試調用違規的方法?在什麼時候檢查(「FileOutputStream不允許」)?當加載MyClass文件,並檢測到它「引用/取決於」FileOutputStream(我不知道這是否在MyClass字節碼中聲明)?或者在嘗試加載FileOutputStream時,首次調用MyClass.writeToFile()

此外,假設方法MyClass.writeToFile()不是我的圖書館必不可少的(但MyClass是),有沒有一些解決方法,或者應該重構庫(而建,說兩種不同的罐子,一個完全成熟的和其他sandbox-友善) ?

+0

爲什麼'java.io.FileInputStream'允許但不是'java.io.FileOutputStream'? – JAB 2011-05-26 20:16:55

+0

@JAB:因爲Google AE容忍被讀取但不能被寫入。聽起來很合理。 – leonbloy 2011-05-26 20:21:50

回答

1

做一個測試部署。如果我記得正確,部署應該會失敗。某個類使用的類是字節碼的一部分,而谷歌正在驗證它。

編輯:我自相矛盾:)此線程指示如果FileOutputStream中類加載的部署只是失敗: GoogleAppEngine : possible to disable FileUpload?

EDIT2:這表示它是類加載器正在檢查/停止加載禁止類:The Sandbox

+0

這又引出了一個問題:當MyClass的加載被調用MyClass.writeToFile()當FileOutputStream中的類加載?或者這是否依賴於特定的類加載器? – leonbloy 2011-05-26 19:19:37

+0

該類可能在加載類時加載,但是它取決於類加載器。 – Kaj 2011-05-26 19:26:30

0

類是在第一參考lazyload。如果你的代碼永遠不會嘗試使用FileOutputStream,那麼應該沒有問題。

相關問題