Ich mache eine einfache URL-Anfrage mit folgendem Code:
URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
Aber in dieser letzten Zeile bekomme ich den Fehler "zu viele Male umgeleitet". Wenn meine "webpage" -Variable beispielsweise google.com ist, funktioniert es einwandfrei, aber wenn ich versuche, die URL meines Servlets zu verwenden, schlägt dies fehl. Anscheinend kann ich die Anzahl der Umleitungen (die Standardeinstellung ist 20) folgendermaßen einstellen:
System.setProperty("http.maxRedirects", "100");
Aber wenn ich es auf etwa 100 hoch drehe, dauert es definitiv länger, den Fehler zu werfen, also weiß ich, dass es versucht. Die URL zu meinem Servlet funktioniert jedoch in (jedem) Browser. Wenn Sie die Option "persist" in Firebug verwenden, scheint die Weiterleitung nur einmal zu erfolgen.
Noch ein paar Infos zu meinem Servlet ... es läuft in Tomcat und wird von Apache mit 'mod-proxy-ajp' angezeigt. Außerdem wird die Formularauthentifizierung verwendet, sodass Sie von jeder URL, die Sie eingeben, zur Anmeldeseite umgeleitet werden sollen. Wie gesagt, das funktioniert in allen Browsern korrekt, aber aus irgendeinem Grund funktioniert die Umleitung nicht mit der URLConnection in Java 6.
Danke fürs Lesen ... Ideen?
Anscheinend wird in einer Endlosschleife umgeleitet, weil Sie die Benutzersitzung nicht aufrechterhalten. Die Sitzung wird normalerweise von einem Cookie unterstützt. Sie müssen eine CookieManager
erstellen, bevor Sie URLConnection
verwenden.
// First set the default cookie manager.
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
// All the following subsequent URLConnections will use the same cookie manager.
URLConnection connection = new URL(url).openConnection();
// ...
connection = new URL(url).openConnection();
// ...
connection = new URL(url).openConnection();
// ...
Duse, ich habe folgende Zeilen hinzugefügt:
Java.net.CookieManager cm = new Java.net.CookieManager();
Java.net.CookieHandler.setDefault(cm);
Siehe dieses Beispiel:
Java.net.CookieManager cm = new Java.net.CookieManager();
Java.net.CookieHandler.setDefault(cm);
String buf="";
dk = new DAKABrowser(input.getText());
try {
URL url = new URL(dk.toURL(input.getText()));
DataInputStream dis = new DataInputStream(url.openStream());
String inputLine;
while ((inputLine = dis.readLine()) != null) {
buf+=inputLine;
output.append(inputLine+"\n");
}
dis.close();
}
catch (MalformedURLException me) {
System.out.println("MalformedURLException: " + me);
}
catch (IOException ioe) {
System.out.println("IOException: " + ioe);
}
titulo.setText(dk.getTitle(buf));
Ich war mit dem gleichen Problem konfrontiert und es hat lange gedauert, bis ich das Problem verstanden habe.
Betrachten Sie unten meine Ressource
@GET
@Path("booksMasterData")
@Produces(Array(core.MediaType.APPLICATION_JSON))
def booksMasterData(@QueryParam("stockStatus") stockStatus : String): Response = {
// some logic here to get the books and send it back
}
Und hier ist der Client-Code, der versucht, eine Verbindung zu meiner obigen Ressource herzustellen
ClientResponse clientResponse = restClient.resource("http://localhost:8080/booksService").path("rest").path("catalogue").path("booksMasterData").accept("application/boks-master-data+json").get(ClientResponse.class);
Und der Fehler kam genau über der Linie.
Was war das Problem?
Meine Ressource hat verwendet
"Anwendung/Json"
im
@Produces-Anmerkung
und mein Kunde benutzte
accept ("application/boks-master-data + json") und das war das problem.
Ich habe lange gebraucht, um das herauszufinden, da der Fehler nicht im Zusammenhang stand. Durchbruch war, als ich versuchte, auf meine Ressource beim Postboten mit zuzugreifen
Accept-> "application/json" Header
es hat aber gut funktioniert
Accept-> "application/boks-master-data + json" Header es tut nicht.
Und selbst der Postman gab mir keinen richtigen Fehler. Der Fehler war zu allgemein. Bitte sehen Sie das Bild unten als Referenz .
Ich habe Jenkins auf Tomcat6 in einer Unix-Umgebung verwendet und diesen Fehler erhalten. Aus irgendeinem Grund wurde das Upgrade auf Java7 behoben. Ich würde gerne wissen, warum das Problem behoben wurde.