обнаружение настройки системного прокси не удается - PullRequest
1 голос
/ 21 июля 2011

У меня есть какая-то загадочная проблема с обнаружением прокси системы: На самом деле, у меня есть правильный код для определения настроек прокси-сервера системы во время выполнения, он также может обрабатывать 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 Ответ

0 голосов
/ 22 июля 2011

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

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

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

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

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

...