Как я должен разрешить java.lang.IllegalArgumentException: protocol = https host = null Exception? - PullRequest
7 голосов
/ 27 апреля 2009

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

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;

    }

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

private URL serverURL = null;

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

OutputStream os = conn.getOutputStream ();

Исключение составляет

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

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

Ответы [ 2 ]

19 голосов
/ 27 апреля 2009

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

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

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

3 голосов
/ 27 апреля 2009

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

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, делая предыдущий оператор мертвым хранилищем
  3. Тогда, поскольку if (serverURLS != null) оценивается как true, так как вы просто присвоили переменной значение в предыдущем выражении, вы присваиваете значение serverURL. if (serverURLS != null) невозможно оценить до false!
  4. Вы никогда не используете переменную serverURLS за пределами предыдущей строки кода.

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

serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...