2009-04-27 2 views
7

Ich arbeite an einem SSL-Client-Server-Programm und ich muss die folgende Methode wiederverwenden.Wie sollte ich java.lang.IllegalArgumentException auflösen: protocol = https host = null Ausnahme?

private boolean postMessage(String message){ 
    try{ 
     String serverURLS = getRecipientURL(message); 

     serverURLS = "https:\\\\abc.my.domain.com:55555\\update"; 

     if (serverURLS != null){ 
      serverURL = new URL(serverURLS); 
     } 

     HttpsURLConnection conn = (HttpsURLConnection)serverURL.openConnection(); 

     conn.setHostnameVerifier(new HostnameVerifier() { 
     public boolean verify(String arg0, SSLSession arg1) { 
      return true; 
     } 
     }); 

     conn.setDoOutput(true); 

     OutputStream os = conn.getOutputStream(); 

     OutputStreamWriter wr = new OutputStreamWriter(os); 

     wr.write(message); 

     wr.flush(); 

     if (conn.getResponseCode() != HttpsURLConnection.HTTP_OK) 
      return false; 
     else 
      return true; 

    } 

Hier ServerURL als

initialisiert
private URL serverURL = null; 

Wenn ich versuche, diese Methode ich eine Ausnahme bei Line erhalten auszuführen,

Output os = conn.getOutputStream();

Die Ausnahme ist

java.lang.IllegalArgumentException: protocol = https host = null 

Was ist der Grund dafür?

Antwort

18

URLs verwenden vorwärts Schrägstriche (/), nicht rückwärts (wie Windows). Versuchen:

serverURLS = "https://abc.my.domain.com:55555/update"; 

Der Grund, warum Sie die Fehlermeldung erhalten, dass die URL-Klasse des Host-Teil der Zeichenfolge nicht analysieren kann und daher host ist null.

3

Dieser Code scheint völlig unnötig:

String serverURLS = getRecipientURL(message); 

serverURLS = "https:\\\\abc.my.domain.com:55555\\update"; 

if (serverURLS != null){ 
    serverURL = new URL(serverURLS); 
} 
  1. serverURLS das Ergebnis getRecipientURL(message)
  2. Dann sind Sie sofort den Wert von serverURLS überschreiben zugewiesen wird, ein Dann dead store
  3. die vorherige Aussage, weil if (serverURLS != null) ergibt true, da Sie nur der Variablen einen Wert zugewiesen haben e In der vorhergehenden Anweisung weisen Sie serverURL einen Wert zu. Es ist unmöglich, if (serverURLS != null) zu false auszuwerten!
  4. Sie verwenden die Variable serverURLS nie tatsächlich über die vorherige Codezeile hinaus.

Sie könnten alle diese ersetzen mit nur:

serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update"); 
+0

Hallo, Diese Linie wird von mir haben soeben den Grund für den Fehler zu überprüfen. Tatsächlich wird die URL anhand der Nachricht gefiltert. Beachten Sie, dass die Zuweisung von ServerURLs eine Testzeile ist :) –

Verwandte Themen