2012-04-06 10 views
1

Das High-Level-Problem, das wir haben, ist dies. Wir haben Apache Wave installiert und läuft in unserem Unternehmensnetzwerk. Es funktioniert so weit wie wir die Seite laden, registrieren, anmelden, erstellen und an Wellen teilnehmen. Aber ich kann nicht scheinen, externe Geräte wie http://everybodywave.appspot.com/gadget/image/gadget.xml zu laden. Ich bin mir sicher, dass es sich um ein Proxy-Problem handelt, da ich Wave außerhalb des Unternehmensnetzwerks installiert habe und Gadgets problemlos laden kann.Apache Wave hinter Firmen-Proxy; oder Anlegesteg respektiert keine Proxy-Eigenschaften

Wo bin ich verwirrt ist; Ich habe die JVM-Proxy-Einstellungen von Apache Wave an mehreren Stellen eingestellt, aber das Laden von Gadgets funktioniert nicht. Ich habe http.proxyHost und http.proxyPort in der jvm-Befehlszeile in den Umgebungsvariablen JAVA_OPTIONS, JAVA_OPTS, JETTY_OPTIONS und JETTY_OPTS und über System.setProperty direkt vor dem Aufruf zum Laden eines Gadgets festgelegt. Ich habe etwas Code hinzugefügt, um eine externe Site in Apache Waves jvm auszuspucken, und das funktioniert, so dass die Proxy-Einstellungen funktionieren. Aber Gadgets immer noch nicht.

Hier ist der nächste Punkt zu dem Problem, dass ich sagen kann: https://svn.apache.org/repos/asf/incubator/wave/trunk/src/org/waveprotocol/box/server/ServerMain.java Ich erhalte eine Debug-Meldung irgendwo unter dem Aufruf: (Linie 121, in GadgetProxyServlet)

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

Die Debug ist :

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

vielleicht ist meine Frage .. warum ist kein Jetty ProxyServlet.Transparent der JVMs http-Proxy-Einstellungen zu ehren? Muss ich auch eine Jetty-Eigenschaft festlegen?

Antwort

4

Es sieht aus wie die Anlegestelle ProxyServlet verwendet die Anlegestelle async http Client unter den Abdeckungen, die eine setProxy(Address) für die Einstellung von Proxies hat. ProxyServlet enthält auch einen Erweiterungspunkt, um die benutzerdefinierte Konfiguration der beiliegenden HttpClient durchzuführen. Dies wird jedoch von der Wave-Plattform nicht angezeigt. Ich würde sagen, haben Sie zwei Möglichkeiten:

  • eine angepasste Version von der Anlegestelle Geben ProxyServlet, die die Proxy-Adresse von Systemeigenschaften oder etwas nimmt und setzt sie auf den umwickelten HttpClient. Das ist ziemlich einfach und würde die Option sein, mit der ich gehen würde.
  • Gleichzeitig können Sie eine Erweiterungsanforderung mit dem Wave-Team ablegen, um diese Einstellung verfügbar zu machen.
+0

Danke! Das hat funktioniert. Ich bin ein wenig verwirrt, wie es funktioniert, seit dem Betrachten des ProxyServlet von Jetty sieht es so aus, als ob es einen neuen rohen Sockel erstellt, um die Gadget URL zu erhalten (http://git.eclipse.org/c/jetty/org.eclipse.jetty. project.git/tree/jetty-servlets/src/main/java/org/eclipse/anlegestelle/servlets/ProxyServlet.java? h = Anlegesteg-8). Das führte mich zu der Annahme, dass ich einen SOCKS-Proxy brauche, den ich nicht habe. Aber trotzdem hat dein Vorschlag funktioniert. – kenen

+0

Froh, dass es funktioniert hat und sehen Sie, was Sie sagen. Es führt diese Verbindung mit dem Proxy ein und kopiert die Anforderung über und setzt die Antwortausgabe auf einen Thread mit der Socket-Eingabe. Fast wie in diesem Fall macht es keine Proxy-Funktion. –