如何读取XML文件? Google App Engine端点

时间:2014-04-03 14:09:40

标签: java xml google-app-engine sax google-cloud-endpoints

我得到了:

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

不幸的是,没有任何改变。

1 个答案:

答案 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);