Обнаружение настройки системного прокси не удается

У меня есть какая-то загадочная проблема с определением системного прокси: на самом деле у меня есть правильный код для определения настроек системного прокси во время выполнения, он также может обрабатывать pac-файлы и настройки http прокси. Это работает абсолютно правильно, когда я храню и выполняю все на целевой станции.

НО: я запускаю один маленький кусочек кода на целевой станции и сохраняю все остальное (jars) на другой станции, на которой работает веб-сервер apache. Из основного я загружаю классы с помощью URLClassloader, так что часть кода загружается через сеть, которая также отвечает за обнаружение прокси. Таким образом, селектор прокси по умолчанию дает DIRECT все время, он не может найти правильные настройки.

Я думаю, проблема в том, что я хочу установить

System.setProperty("java.net.useSystemProxies","true");

В загруженном классе и как-то это не работает... Но когда я sysout значение свойства, это true,

Я написал небольшую тестовую программу, и единственное отличие состоит в том, что:

A)

Class.forname("a"); -> a is in the classpath

B)

URL[] url = new URL[1];
url[0] = new URL("http://1.2.3.4/dtfw");
URLClassloader u = new URLClassloader(url);
Class.forname("a", true, u);

Обе части кода работают, единственное разное в выводе. У кого-нибудь есть идеи?

Заранее спасибо!!

Zsomi

1 ответ

Я нашел основную причину проблемы:

DefaultProxySelector является одиночным для каждой JVM и его поведение основано на if System.setProperty("java.net.useSystemProxies","true"); установлен или нет.

Поскольку URLClassloader использует его, это значение ложно, когда оно создается. И когда я пытаюсь использовать его в классе "a", он не может найти настройки прокси-сервера системы, поскольку при установке это свойство не было установлено.

Так что у меня есть причина, но пока нет решения.

С уважением, Zsomi

Другие вопросы по тегам