1

我们的应用程序建立在 Jena 和 Fuseki 之上。该应用程序使用联合 SPARQL 查询访问公共域中的 SPARQL 端点。

应用程序所针对的某些网络仅允许通过 HTTP 代理的 HTTP 请求作为其网络策略的一部分。

如何配置 fuseki 以便在 SPARQL 子查询中将 HTTP 请求作为 SERVICE 块的一部分发出时,它使用正确的 http_proxy?

在 Linux 上,我尝试使用本地环境变量

export http_proxy=http://myproxy.notadomain

在运行 fuseki-server 进程的 shell 中,但 Fuseki 似乎不尊重这个环境变量。

我在 Fuseki 文档中找不到有关如何处理的信息。

我想要一种将 fuseki-server 直接作为 Linux 进程运行并配置代理的方法,无论是在配置文件中,还是作为运行时参数。

感谢所有的建议。

4

2 回答 2

2

Fuseki 是一个 Java 应用程序。我通常做的是用我所有的自定义导出一个 JAVA_OPTIONS 变量,例如:

export JAVA_OPTIONS="-Xmx10g -Dhttp.proxyHost=proxy.example.org -Dhttp.proxyPort=8080 -Dfile.encoding=UTF-8 -Dlog4j.configuration=file:./log4j.properties"
于 2014-09-05T17:15:03.427 回答
1

代理配置

您可以使用HttpOp访问/更改HttpClientJena 使用的内容,然后配置然后分配一个已配置为 Proxy的客户端。请注意,HttpClientJena 使用的版本不是最新的,因此如果您遵循教程(例如我链接的教程),则需要稍微调整以创建客户端。

jena-arq-2.12.0使用fuseki-1.1.0取决于httpclient-4.2.6. 以下代码将配置 ARQ 以使用代理:

final HttpHost proxy = new HttpHost("someproxy",8080);
final DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
HttpOp.setDefaultHttpClient(httpclient);

Fuseki 配置

我似乎找不到在 fuseki 中配置它的文档化方法,所以我自己的个人技巧是:

  • 创建一个类,其static初始化方法设置所有代理配置。
package my.fully.qualified;
public class ConfigurationClass {
   static {
      // Proxy config code
      final HttpHost proxy = new HttpHost("someproxy",8080);
      final DefaultHttpClient httpclient = new DefaultHttpClient();
      httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
      HttpOp.setDefaultHttpClient(httpclient);
   }
}
  • 执行 fuseki 时,将包含该类的 jar 放在类路径中。这将需要调整 fuseki 脚本以将我的 jar 添加到类路径中。
$ java -classpath '*' org.apache.jena.fuseki.FusekiCmd
  • 编辑我的fuseki 配置以包含表单的三元组[] ja:loadClass "my.fully.qualified.ConfigurationClass" .这将导致 fuseki 为我的特殊类执行初始化方法,然后更改HttpClientJena/ARQ 内部使用的默认值。这与 Jena 在内部用于初始化 TDB 的技术相同[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
于 2014-09-05T16:57:38.010 回答