6.3. HTTP Communication¶
6.3.1. Dependencies¶
HTTP communication requires the NET foundation library and the HTTP Client add-on library.
To use them, add the following dependencies to your project’s module.ivy file:
<dependency org="ej.api" name="net" rev="1.1.2" />
<dependency org="ej.library.eclasspath" name="httpclient" rev="1.5.0" />
6.3.2. Replacing the javax.microedition.io.HttpConnection class¶
Code using javax.microedition.io.HttpConnection can use sun.net.www.protocol.http.HttpURLConnection instead.
6.3.2.1. Code sample¶
The following sample is extracted from the J2ME Javadoc.
void getViaHttpConnection(String url) throws IOException {
    HttpConnection c = null;
    InputStream is = null;
    int rc;
    try {
        c = (HttpConnection)Connector.open(url);
        // Getting the response code will open the connection,
        // send the request, and read the HTTP response headers.
        // The headers are stored until requested.
        rc = c.getResponseCode();
        if (rc != HttpConnection.HTTP_OK) {
            throw new IOException("HTTP response code: " + rc);
        }
        is = c.openInputStream();
        // Get the ContentType
        String type = c.getType();
        // Get the length and process the data
        int len = (int)c.getLength();
        if (len > 0) {
            int actual = 0;
            int bytesread = 0 ;
            byte[] data = new byte[len];
            while ((bytesread != len) && (actual != -1)) {
                actual = is.read(data, bytesread, len - bytesread);
                bytesread += actual;
            }
        } else {
            int ch;
            while ((ch = is.read()) != -1) {
                ...
            }
        }
    } catch (ClassCastException e) {
        throw new IllegalArgumentException("Not an HTTP URL");
    } finally {
        if (is != null)
            is.close();
        if (c != null)
            c.close();
    }
 }
It can be adapted as follows:
void getViaHttpConnection(String url) throws IOException {
    HttpURLConnection c = null;
    InputStream is = null;
    int rc;
    try {
        c = new HttpURLConnection(new URL(url));
        // Getting the response code will open the connection,
        // send the request, and read the HTTP response headers.
        // The headers are stored until requested.
        rc = c.getResponseCode();
        if (rc != HttpURLConnection.HTTP_OK) {
            throw new IOException("HTTP response code: " + rc);
        }
        is = c.getInputStream();
        // Get the ContentType
        String type = c.getContentType();
        // Get the length and process the data
        int len = c.getContentLength();
        if (len > 0) {
            int actual = 0;
            int bytesread = 0;
            byte[] data = new byte[len];
            while ((bytesread != len) && (actual != -1)) {
                actual = is.read(data, bytesread, len - bytesread);
                bytesread += actual;
            }
        } else {
            int ch;
            while ((ch = is.read()) != -1) {
                ...
            }
        }
    } catch (ClassCastException e) {
        throw new IllegalArgumentException("Not an HTTP URL");
    } finally {
        if (is != null) {
            is.close();
        }
        if (c != null) {
            c.disconnect();
        }
    }
}
6.3.2.2. HTTP Status Codes¶
HTTP Status Codes have the exact same names.
For instance, HttpConnection.HTTP_ACCEPTED corresponds to HttpURLConnection.HTTP_ACCEPTED, and HttpConnection.HTTP_FORBIDDEN corresponds to HttpURLConnection.HTTP_FORBIDDEN.
Warning
The following HTTP Status Codes are not available as static String in java.net.HttpURLConnection:
HTTP_EXPECT_FAILED(417)
HTTP_TEMP_REDIRECT(307)
HTTP_UNSUPPORTED_RANGE(416)
6.3.2.3. HTTP methods¶
setRequestMethod() and getRequestMethod() support more HTTP methods than their J2ME counterparts.
In addition to GET, POST and HEAD, the following methods are now supported:
OPTIONS
PUT
DELETE
TRACE
Note
HTTP method names are not provided as static String, so they need to be explicitly written when calling setRequestMethod() or checking the result of getRequestMethod().