Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How should I resolve java.lang.IllegalArgumentException: protocol = https host = null Exception?

I am working on a SSL client server program and I have to reuse the following method.

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;

    }

Here ServerURL is initialized as

private URL serverURL = null;

When I try to execute this method I get an exception at Line,

OutputStream os = conn.getOutputStream();

The exception is

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

What is the reason for this?

like image 285
Chathuranga Chandrasekara Avatar asked Apr 27 '09 12:04

Chathuranga Chandrasekara


2 Answers

URLs use forward slashes (/), not backward ones (as windows). Try:

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

The reason why you get the error is that the URL class can't parse the host part of the string and therefore, host is null.

like image 94
Aaron Digulla Avatar answered Nov 10 '22 07:11

Aaron Digulla


This code seems completely unnecessary:

String serverURLS = getRecipientURL(message);

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

if (serverURLS != null){
    serverURL = new URL(serverURLS);
}
  1. serverURLS is assigned the result of getRecipientURL(message)
  2. Then immediately you overwrite the value of serverURLS, making the previous statement a dead store
  3. Then, because if (serverURLS != null) evaluates to true, since you just assigned the variable a value in the preceding statement, you assign a value to serverURL. It is impossible for if (serverURLS != null) to evaluate to false!
  4. You never actually use the variable serverURLS beyond the previous line of code.

You could replace all of this with just:

serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");
like image 37
matt b Avatar answered Nov 10 '22 05:11

matt b