Как я должен решить 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);
}
- 
serverURLSприсваивается результатgetRecipientURL(message)
- затем сразу же вы перезаписываете значение serverURLS, делая предыдущее утверждение a мертвые магазине
- , потому что if (serverURLS != null)значениеtrue, поскольку просто присвоено переменной значение в предыдущем операторе, вы присваиваете значениеserverURL. Невозможноif (serverURLS != null)оценить кfalse!
- вы никогда не используете переменную serverURLSза пределами предыдущей строки кода.
вы можете заменить все это просто:
serverURL = new URL("https:\\abc.my.domain.com:55555\update");
