【发布时间】:2014-02-26 18:43:40
【问题描述】:
我有一个 xslt 文件存储在文件夹 Project/tools 中。 (我使用的是 Netbeans IDE。)
我尝试在我的代码中访问此文件,但在运行时,我得到一个AccessControlException: access denied。
代码是:
java.net.URI xsltURI = new java.net.URI(myUtil.getUri("xsltFile.xslt"));
Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltURI)));
myUtil 实例必须用于访问 URI,原因在这里并不重要。我打印了它的输出,它正确地给出了文件的相对路径。
我尝试使用file:/// 和file:///[fulldomain] 作为相对路径的前缀,但在每种情况下,它实际上都尝试访问服务器上的硬盘驱动器,即使我没有在任何地方提供驱动器名称。 (!) 它会尝试访问 C:[relative-path],而这甚至都不是文件所在的位置。
如果我省略file:///,那么我会得到the URI is not absolute,如果我只是给出文件的完整网址,我会得到NullPointerException。
任何帮助都将不胜感激。
更新:在我下面的评论之后,我的代码类似于
java.net.URI xsltURI = new java.net.URI("https://host" + myB2U.getUri("xsltFile.xslt"));
java.net.URL xsltURL = xsltURI.toURL();
java.net.URLConnection myConnection = xsltURL.openConnection();
myConnection.connect(); //AccessControlException: access denied ("java.net.SocketPermission"...
java.io.InputStream xsltStream = myConnection.getInputStream();
Transformer transformer = factory.newTransformer(new StreamSource(xsltStream));
有什么明显的错误吗?
【问题讨论】:
-
好的。根据我收集到的信息,我应该用文件的路径实例化一个
URL对象。从那里,我应该能够从URL初始化URLConnection。调用URL的connect()方法后,应该可以通过调用getInputStream()方法得到InputStream。然而,当我调用connect()方法时,我得到了一个AccessControlException: access denied ("java.net.SocketPermission ")。 -
您是否在应用程序中使用了安全管理器?如果是,您可能需要在安全策略文件中为您的代码授予 SocketPermission
-
是的。需要添加权限。