我得到了:
wordsDictionary.xml
in:
/WEB-INF/xml/
我正在尝试使用代码{<1}}阅读它:
SAXReader
在Dev服务器上,一切都很顺利。在将其部署到生产环境时,我遇到了错误:
...
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")
您需要知道我正在使用 Google端点。所以我无法直接访问任何 Servlet (没有任何内容传递给端点方法 - context.getResourceAsStream
)。
我的问题是:你知道如何在GAE端点上加载xml文件吗?
修改 请阅读https://developers.google.com/appengine/kb/java?csw=1#readfile:
如果文件位置不是问题,问题可能是 您用于从文件中读取的方法未列入白名单。您的 应用程序可以使用任何对读取有用的IO类 文件系统,例如File,FileInputStream,FileReader或 RandomAccessFile的。有关列入白名单的完整列表,请参阅 JRE班级白名单。
我已将部分代码更改为:
HttpRequest
不幸的是,没有任何改变。
答案 0 :(得分:2)
错误原因是&#34; /&#34;在WEB-INF之前。 记住:
access denied ("java.io.FilePermission"
"/WEBINF/xml/wordsDictionary.xml" "read")
即使您尝试访问错误的目录,也可能会抛出此错误。
还要记住为XML文件设置正确的编码:
FileInputStream stream = new FileInputStream("WEB-INF/xml/wordsDictionary.xml");
InputSource is = new InputSource(new InputStreamReader(stream, "UTF-8"));
is.setEncoding("UTF-8");
reader.parse(is);