Информировать прокси-серверы jena и fuseki для федеративных запросов

Наше приложение построено поверх Jena и Fuseki. Приложение использует федеративные запросы SPARQL для доступа к конечным точкам SPARQL в открытом доступе.

Некоторые сети, для которых предназначено приложение, разрешают HTTP-запросы только через HTTP-прокси как часть своей сетевой политики.

Как можно сконфигурировать fuseki, чтобы при выполнении HTTP-запросов как части блока SERVICE в подзапросе SPARQL он использовал правильный http_proxy?

В Linux я попытался использовать локальную переменную среды

export http_proxy=http://myproxy.notadomain

в оболочке, которая запускает процесс fuseki-server, но Fuseki, похоже, не учитывает эту переменную среды.

Я не могу найти информацию в документации Fuseki о том, как это делается.

Я хотел бы получить способ запуска fuseki-server напрямую как процесс Linux с настроенным прокси-сервером, либо в файле конфигурации, либо в качестве параметра времени выполнения.

Все советы с благодарностью получены.

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"

Конфигурация прокси

Ты можешь использовать HttpOp получить доступ / изменить HttpClient это используется Jena и затем настраивает, затем назначает клиента, который был Настроен для Прокси. Как примечание, версия HttpClient используемый Дженой не самый современный, поэтому, если вы следуете учебным пособиям (таким как тот, на который я ссылался), вам нужно будет немного изменить его, чтобы создать клиента.

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. Для этого потребуется настроить скрипт fuseki, чтобы добавить мою банку в путь к классам.
$ java -classpath '*' org.apache.jena.fuseki.FusekiCmd
  • Отредактируйте мою конфигурацию fuseki, чтобы она содержала тройку вида [] ja:loadClass "my.fully.qualified.ConfigurationClass" . Это заставит fuseki выполнить метод инициализации для моего специального класса, который затем изменит значение по умолчанию HttpClient используется Jena/ARQ для внутреннего использования. Это тот же метод, который использовался Jena для инициализации TDB с помощью [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
Другие вопросы по тегам