尝试解析xml文件,但在已部署的GAE中获取java.security.AccessControlException

问题描述:

我试图在存储在WEB-INF文件中的本地XML文件上的GAE应用程序上运行SAXParser。当我在开发模式中使用它时,它工作正常,但是当我部署它并尝试解析该文件时,出现以下异常,并且我没有编写XML文件,只是试图解析本地文件:尝试解析xml文件,但在已部署的GAE中获取java.security.AccessControlException

java .security.AccessControlException:访问被拒绝( “java.io.FilePermission中的” “WEB-INF/MapInfo.xml”, “写”)

的代码我试图运行看起来像这样:

@Override 
public Double countPOIs() { 
    Double total = 0.0; 
    List<String> Coordinates; 
    Coordinates = new ArrayList<String>(); 

    try { 
     XMLParser parser = new XMLParser(Coordinates, 8); 
     XMLReader reader = XMLReaderFactory.createXMLReader(); 
     reader.setContentHandler(parser); 
     reader.parse("WEB-INF/MapInfo.xml"); 
     total = parser.getACC(); 

    } catch (SAXException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


    return total; 

} 

构造函数看起来有点奇怪,但与此操作无关。有没有人在这里看到任何问题?

+0

是reader.parse抛出异常的声明?这可能是解析器试图打开文件进行读写,即使这是不必要的。如果解析过载了开放流参数,那么这可能会提供一条出路。 –

+0

它没有回答上面的问题,但我确实找到了一种解决方案,使用解析器进行一次性处理以将数据上传到数据存储区。 而不是将xml文件放在您的应用程序本地放置在一个投递箱帐户,提取链接并像这样调用解析器: reader.parse(new InputSource(new URL(“url”)。openStream() )); – user3417076

+0

感谢您查找开放式流解析超载,我将在避免使用Dropbox的答案中使用它。 –

尝试用替换reader.parse线以下(对不起,无法对其进行测试):

final javax.servlet.ServletContext servletContext = this.getServletContext(); 
java.io.InputStream stream = servletContext.getResourceAsStream("/WEB-INF/MapInfo.xml"); 
reader.parse(stream);