【发布时间】:2014-04-03 14:09:40
【问题描述】:
我明白了:
wordsDictionary.xml
在:
/WEB-INF/xml/
我正在尝试使用代码通过SAXReader 阅读它:
...
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
saxFactory.setValidating(false);
saxFactory.setNamespaceAware(false);
XMLReader reader = saxFactory.getXMLReader();
reader.setContentHandler(new WordsDictionarySAXHandler(this,lettersMapping));
reader.parse(new InputSource("/WEB-INF/xml/wordsDictionary.xml"));
...
在开发服务器上一切正常。将其部署到生产环境时出现错误:
com.google.api.server.spi.SystemService invokeServiceMethod: access denied
("java.io.FilePermission" "/WEB-INF/xml/wordsDictionary.xml" "read")
java.security.AccessControlException: access denied ("java.io.FilePermission"
"/WEBINF/xml/wordsDictionary.xml" "read")
在你说我需要使用之前:context.getResourceAsStream
您需要知道我正在使用 Google Endpoints。所以我无法直接访问任何 Servlet(没有任何东西传递给端点方法 - HttpRequest)。
我的问题是:你知道如何在 GAE 端点上加载 xml 文件吗?
编辑: 只需阅读https://developers.google.com/appengine/kb/java?csw=1#readfile:
如果文件位置不是问题,问题可能是 您用来读取文件的方法未列入白名单。您的 应用程序可以使用任何对读取有用的 IO 类 文件系统,例如 File、FileInputStream、FileReader 或 随机存取文件。有关列入白名单的课程的完整列表,请参阅 JRE 类白名单。
我已将部分代码更改为:
FileInputStream stream = new FileInputStream("/WEB-INF/xml/wordsDictionary.xml");
reader.parse(new InputSource(new InputStreamReader(stream)));
很遗憾,没有任何改变。
【问题讨论】:
标签: java xml google-app-engine sax google-cloud-endpoints