разрешение файла gwt - PullRequest
       0

разрешение файла gwt

1 голос
/ 13 июня 2010

У меня есть небольшой проект GWT / AppEngine, который использует RPC. В основном мне нужно получить некоторые данные из 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 ]

1 голос
/ 13 июня 2010

Мне кажется, проблема в том, что вы пытаетесь прочитать файл, который не находится в вашем рабочем каталоге.Инструкции по структурированию вашего кода в приложениях gwt следующие:

В главном каталоге проекта создайте следующие каталоги:

  • папка src - содержит рабочий исходный код Java
  • war folder - ваше веб-приложение;содержит статические ресурсы, а также скомпилированный вывод
  • тестовая папка - (необязательно) тестовый код JUnit будет идти сюда

Попробуйте переместить файл в каталог war (например, /war / resources / myFile.xml), а затем откройте его по

File myFile = new File(System.getProperty("user.dir") + "/resources/myFile.xml");
0 голосов
/ 13 июня 2010

Обычно, когда вы загружаете ресурс, который находится в вашем classpath, вы не должны использовать java.io.File.Зачем?Поскольку вполне возможно, что реального файла нет - классы часто упаковываются в файл .jar или даже загружаются совершенно другим способом (очень вероятно в случае AppEngine, хотя я не знаю,подробности.)

Итак, если вы хотите загрузить его прямо из вашего classpath, вы можете использовать:

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

Затем вы можете использовать входной поток в вашем демаршаллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...