Как я должен решить java.ленг.IllegalArgumentException: protocol = https host = нулевое исключение?

Я работаю над программой клиентского сервера SSL, и мне нужно повторно использовать следующий метод.

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

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

         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;

    }

здесь ServerURL инициализируется как

private URL serverURL = null;

когда я пытаюсь выполнить этот метод, я получаю исключение в строке

клиенту OutputStream ОС = соед.getOutputStream();

исключение

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

в чем причина этого?

2 ответов


URL-адреса используют косые черты (/), а не обратные (как windows). Попробуйте:

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

причина, по которой вы получаете ошибку, заключается в том, что класс URL не может анализировать хост-часть строки и, следовательно,host is null.


этот код кажется совершенно ненужным:

String serverURLS = getRecipientURL(message);

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

if (serverURLS != null){
    serverURL = new URL(serverURLS);
}
  1. serverURLS присваивается результат getRecipientURL(message)
  2. затем сразу же вы перезаписываете значение serverURLS, делая предыдущее утверждение a мертвые магазине
  3. , потому что if (serverURLS != null) значение true, поскольку просто присвоено переменной значение в предыдущем операторе, вы присваиваете значение serverURL. Невозможно if (serverURLS != null) оценить к false!
  4. вы никогда не используете переменную serverURLS за пределами предыдущей строки кода.

вы можете заменить все это просто:

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