gpt4 book ai didi

java - 从 Clojure 调用的 App Engine URLFetch 服务给出 AccessControlException

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:56 25 4
gpt4 key购买 nike

我正在尝试在 Clojure 中构建一个简单的网络小部件,它应该获取 Picasa 提要,从那里检索缩略图 URL,并返回将插入到页面中的 HTML(使用 JQuery AJAX 调用)。 Picasa 提要有一个 https://... url。当我使用 mvn jetty:run 在本地 Jetty 实例中运行它时,一切正常;但是,当我尝试在本地 GAE 实例 (mvn gae:run) 中运行时,它会因 AccessControlException 而失败。我已经阅读了 GAE 文档,但是其中指出,对于来自 Java 的 URLFetch,应该只使用普通的 Java URLConnection 类,Google 将在其中提供自己的实现。据我所知,我完全按照他们的示例,仅使用 Clojure/Java 互操作。

Google 示例代码如下所示:

import java.net.URL;
// (other imports omitted)
try {
URL url = new URL("http://www.example.com/atom.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
// ...
}

有趣的是,这是直接在 URL 上调用 openStream,尽管文档在其他地方提到使用 UrlConnection。我都试过了,但结果是一样的。我对应的 Clojure 代码,使用 openConnection:

  (if (.startsWith str-url "https://picasaweb.google.com")
(let [feed-url (java.net.URL. str-url)
connection (.openConnection feed-url)
xmltags (xml-seq (parse (.openStream connection)))]
; ...

当我在 GAE 中运行它时,我得到以下堆栈跟踪(截断)

java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)

最后是底部:

Caused by: java.security.AccessControlException: access denied     (java.security.SecurityPermission getProperty.ssl.KeyManagerFactory.algorithm)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:252)
at java.security.Security.getProperty(Security.java:725)
at org.eclipse.jetty.util.ssl.SslContextFactory.<clinit>(SslContextFactory.java:92)
... 74 more

我一直在谷歌搜索以查看是否有任何我应该添加到 appengine-web.xml 或其他地方的设置,但我什么也没看到。我读到的所有内容都告诉我这应该“有效”,但事实并非如此。欢迎任何建议;如果需要,我可以发布完整的源代码或完整的堆栈跟踪,尽管我认为以上内容几乎是相关的部分。

最佳答案

openStream()openConnection().getInputStream() 的简写,其中 openConnection() 返回 URLConnection

关于java - 从 Clojure 调用的 App Engine URLFetch 服务给出 AccessControlException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com