волна Apache за прокси компании; или причал не уважает свойства прокси

Наша проблема высокого уровня заключается в следующем. В нашей корпоративной сети установлен и работает Apache Wave. Он работает до тех пор, пока мы загружаем сайт, регистрируемся, входим в систему, создаем и участвуем в волнах. Но я не могу получить внешние гаджеты, такие как http://everybodywave.appspot.com/gadget/image/gadget.xml для загрузки. Я уверен, что это проблема с прокси-сервером, потому что я установил волну за пределами корпоративной сети и могу нормально загружать гаджеты.

Где я смущен; Я установил параметры прокси-сервера JVM Apache Wave в нескольких местах, но они не работают при загрузке гаджетов. Я установил http.proxyHost и http.proxyPort в командной строке jvm, в переменных среды JAVA_OPTIONS, JAVA_OPTS, JETTY_OPTIONS и JETTY_OPTS, а также через System.setProperty прямо перед вызовом для загрузки гаджета. Я добавил некоторый код для создания внешнего сайта в jvm Apache Wave, и это работает, поэтому настройки прокси работают. Но гаджетов по-прежнему нет.

Вот самое близкое к проблеме место, которое я могу сказать: https://svn.apache.org/repos/asf/incubator/wave/trunk/src/org/waveprotocol/box/server/ServerMain.java Я получаю отладочное сообщение где-то под вызовом: (строка 121; в GadgetProxyServlet)

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    proxyServlet.service(req, res);

Отладка:

[java] 2012-04-06 10:47:25.197:WARN:oejsKwbs.ServerMain$GadgetProxyServlet, annotation=[none]]:java.net.ConnectException: Connection timed out

Так что, возможно, мой вопрос: почему Jetty ProxyServlet.Transparent не соблюдает настройки http-прокси jvm? Нужно ли мне также устанавливать какое-то свойство Jetty?


person kenen    schedule 06.04.2012    source источник


Ответы (1)


Похоже, что причал ProxyServlet использует под прикрытием асинхронный http-клиент причала, у которого есть setProxy(Address) для настройки прокси. ProxyServlet также содержит точку расширения для выполнения пользовательской настройки закрытого HttpClient, но она не предоставляется платформой Wave. Я бы сказал, что у вас есть два варианта:

  • Предоставьте настроенную версию причала ProxyServlet, которая берет адрес прокси-сервера из системных свойств или чего-то еще и устанавливает его для обернутого HttpClient. Это довольно просто, и я бы выбрал именно этот вариант.
  • В то же время вы можете отправить запрос на улучшение команде Wave, чтобы раскрыть этот параметр.
person Tim Jones    schedule 06.04.2012
comment
Спасибо! Это сработало. Я немного запутался, как это работает, так как глядя на ProxyServlet Jetty, похоже, что он создает новый необработанный сокет для получения URL-адреса гаджета (git.eclipse. org/c/jetty/org.eclipse.jetty.project.git/tree/). Это заставило меня поверить, что мне нужен прокси-сервер SOCKS, которого у меня нет. Но в любом случае ваше предложение сработало. - person kenen; 09.04.2012
comment
Рад, что это сработало, и посмотрите, что вы говорите. Он вводит это соединение с прокси-сервером, копирует запрос и помещает вывод ответа в поток с вводом сокета. Почти как в этом случае, он сам не занимается проксированием. - person Tim Jones; 10.04.2012