公司代理背后的Apache浪潮;或者码头不尊重代理属性

时间:2012-04-06 17:56:46

标签: java jetty google-wave

我们遇到的高级问题是这个。我们已在公司网络上安装并运行Apache Wave。它适用于我们加载网站,注册,登录,创建和参与wave。但我似乎无法加载外部小工具,例如http://everybodywave.appspot.com/gadget/image/gadget.xml。我确定这是一个代理问题,因为我已在公司网络外安装了wave,我可以正常加载小工具。

我很困惑的地方;我已经在几个地方设置了Apache Wave的JVM代理设置,但是他们加载的小工具不起作用。我在jvm命令行上,在环境变量JAVA_OPTIONS,JAVA_OPTS,JETTY_OPTIONS和JETTY_OPTS中设置了http.proxyHost和http.proxyPort,并在调用加载小工具之前通过System.setProperty设置了http.proxyHost和http.proxyPort。我已经添加了一些代码来在Apache Wave的jvm中吐出一个外部站点,这样可行,所以代理设置正常。但小工具仍然没有。

以下是我能说的最接近问题的点: 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尊重jvm的http代理设置?我是否也需要设置一些Jetty属性?

1 个答案:

答案 0 :(得分:4)

看起来jetty ProxyServlet在封面下使用jetty异步http客户端,其中setProxy(Address)用于设置代理。 ProxyServlet还包含一个扩展点,用于执行随附的HttpClient的自定义配置,但Wave平台不会公开这一点。我想你有两个选择:

  • 提供jetty ProxyServlet的自定义版本,该版本从系统属性或其他内容中获取代理地址,并将其设置在已包装的HttpClient上。这很简单,也是我选择的选择。
  • 同时,您可以向wave小组提交增强请求以公开此设置。