2012-01-10 3 views
1

Я использую XML-файл для хранения моих SQL-запросов. В соответствии с правилами приложение двигателя здесь: http://code.google.com/appengine/kb/java.html#readfileИспользование XML-файла в GAE

У меня есть файл в моей войне/WEB-INF каталог и нагрузки как таковой:

 DocumentBuilder db = dbf.newDocumentBuilder();   
     dom = db.parse("\\WEB-INF\\Queries.xml"); 

Когда я раскрываю в GAE Я вижу это в журналах:

access denied (java.io.FilePermission /\WEB-INF\Queries.xml read) 

Я что-то пропустил?

ответ

2

он принимает путь как абсолютный путь, и поэтому он говорит, что доступ запрещен для этого файла.

Вместо этого используйте перегрузку синтаксического анализа (InputStream is), который принимает InputStream в качестве аргумента.

попробуйте этот кусок кода, он должен работать нормально.

ServletContext context = getServletContext(); 
InputStream is = context.getRealPath("/WEB-INF/Queries.xml"); 
DocumentBuilder db = dbf.newDocumentBuilder();   
     dom = db.parse(is);// throws SAXException and IOException 
0

Я выяснил, что нет необходимости использовать ServletContext для доступа к внешнему файлу. Простое использование нового файла («WEB-INF/Queries.xml»). (Обратите внимание на отсутствие слеша на первый символ пути к файлу)

Например, я использую это для доступа к файлу backends.xml:

File tBackendFile = new File("WEB-INF/backends.xml"); 
Document tBackendDoc = DocumentBuilderFactory.newInstance() 
              .newDocumentBuilder() 
              .parse(tBackendFile); 
+0

2 большие решения спасибо, ребята! Я использовал второй, но принял первый: P –

+0

Нет проблем, рад помочь: p –

Смежные вопросы