Jak mam rozwiązać java.lang.IllegalArgumentException: protocol = https host = zerowy wyjątek?


Pracuję nad programem serwera klienta SSL i muszę ponownie użyć następującej metody.
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; }

Tutaj ServerURL jest inicjowany jako
private URL serverURL = null;

Kiedy próbuję tej metody, pojawia się wyjątek na linii,

OutputStream OS = conn.getOutputStream ();

Wyjątkiem jest
java.lang.IllegalArgumentException: protocol = https host = null

Jaki jest tego powód?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używaj ukośników (/) w adresach URL, a nie odwrotnych ukośników (jak w oknach). Próbować:
serverURLS = "[url=https://abc.my.domain.com:55555/update";]https://abc.my.domain.com:55555/update";[/url]

Powodem otrzymywania błędu jest to, że klasa url nie może przeanalizować głównej części ciągu i dlatego
host
ma wartość
null
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ten kod wydaje się zupełnie niepotrzebny:
String serverURLS = getRecipientURL(message);serverURLS = "https:\\\\abc.my.domain.com:55555\\update";if (serverURLS != null){
serverURL = new URL(serverURLS);
}

  • serverURLS
    pobiera wynik do
    getRecipientURL (message)
  • Następnie natychmiast zastępujesz wartość
    serverURLS
    , wykonując poprzednią instrukcję martwe skarbiec http://en.wikipedia.org/wiki/Dead_store
  • Zatem, ponieważ wartość
    if (serverURLS! = Null)
    to
    true
    , ponieważ tylko cokolwiek przypisałeś do zmiennej w poprzedniej instrukcji, przypisujesz wartość do
    serverURL
    . Nie można dla
    if (serverURLS! = Null)
    oszacować na
    false
    !
  • W rzeczywistości nigdy nie używasz zmiennej
    serverURLS
    poza poprzednią linią kodu.

Całość można by zastąpić prostym:
serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się