title: Talend: REST Call results in either "URI is not absolute" or "UnknownHostException"
body: <p>I am trying to get data from a REST API to our database with the help of Talend Jaspersoft ETL Express Version 5.6.
  To make sure that my problem is not related to our server configuration i installed the tool locally too and got stuck. Since I am a student who is not well experienced with java but needs to get this run for his company i hope you can help me. I have only some basic knowledge so i did not try to find a solution in the "Code" tab, only worked with the Designer.</p>
  
  <p>In the end I wanted to try out the following tutorial:
  <a href="http://dwetl.com/2015/08/11/trest-use-case-example-use-rest-api-in-talend/" rel="nofollow">http://dwetl.com/2015/08/11/trest-use-case-example-use-rest-api-in-talend/</a>
  but that don't works too for me. I can get the data when i use the call in my browser but with that tool i am getting only errors.</p>
  
  <p>With "<a href="https://api.github.com/users/mralexgray/followers" rel="nofollow">https://api.github.com/users/mralexgray/followers</a>" as URL I get an UnknownHostException:</p>
  
  <pre><code>    Starte Job Test am 11:20 21/07/2016.
  
  [statistics] connecting to socket on port 3941
  [statistics] connected
  Exception in component tREST_1
  com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: api.github.com
      at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:131)
      at com.sun.jersey.api.client.Client.handle(Client.java:616)
      at com.sun.jersey.api.client.WebResource.handle(WebResource.java:559)
      at com.sun.jersey.api.client.WebResource.get(WebResource.java:182)
      at testetl.test_0_1.Test.tREST_1Process(Test.java:572)
      at testetl.test_0_1.Test.runJobInTOS(Test.java:929)
      at testetl.test_0_1.Test.main(Test.java:786)
  Caused by: java.net.UnknownHostException: api.github.com
      at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
      at java.net.PlainSocketImpl.connect(Unknown Source)
      at java.net.SocksSocketImpl.connect(Unknown Source)
      at java.net.Socket.connect(Unknown Source)
      at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
      at sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
      at sun.net.NetworkClient.doConnect(Unknown Source)
  [statistics] disconnected
      at sun.net.www.http.HttpClient.openServer(Unknown Source)
      at sun.net.www.http.HttpClient.openServer(Unknown Source)
      at sun.net.www.protocol.https.HttpsClient.&lt;init&gt;(Unknown Source)
      at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
      at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
      at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
      at java.net.HttpURLConnection.getResponseCode(Unknown Source)
      at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
      at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:218)
      at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:129)
      ... 6 more
  Job Test endet am 11:20 21/07/2016. [exit code=1]
  </code></pre>
  
  <p>If I cut off that "https://" part and use "api.github.com/users/mralexgray/followers" as Url I get the error "Uri is not absolute"</p>
  
  <pre><code>Starte Job Test am 11:31 21/07/2016.
  
  [statistics] connecting to socket on port 3809
  [statistics] connected
  Exception in component tREST_1
  com.sun.jersey.api.client.ClientHandlerException: java.lang.IllegalArgumentException: URI is not absolute
      at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:131)
      at com.sun.jersey.api.client.Client.handle(Client.java:616)
      at com.sun.jersey.api.client.WebResource.handle(WebResource.java:559)
      at com.sun.jersey.api.client.WebResource.get(WebResource.java:182)
      at testetl.test_0_1.Test.tREST_1Process(Test.java:572)
      at testetl.test_0_1.Test.runJobInTOS(Test.java:929)
      at testetl.test_0_1.Test.main(Test.java:786)
  Caused by: java.lang.IllegalArgumentException: URI is not absolute
      at java.net.URI.toURL(Unknown Source)
      at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:140)
      at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:129)
      ... 6 more
  [statistics] disconnected
  Job Test endet am 11:31 21/07/2016. [exit code=1]
  </code></pre>
  
  <p>Just to give you as many information as possible, here is a little part out of the auto generated java code which seems to be about this REST Call for me, but maybe I am completly wrong and this dont helps at all since I have only basic java knowledge:</p>
  
  <pre><code>        /**
           * [tREST_1 begin ] start
           */
  
          ok_Hash.put("tREST_1", false);
          start_Hash.put("tREST_1", System.currentTimeMillis());
  
          currentComponent = "tREST_1";
  
          int tos_count_tREST_1 = 0;
  
          String endpoint_tREST_1 = "api.github.com/users/mralexgray/followers";
  
          String trustStoreFile_tREST_1 = System
                  .getProperty("javax.net.ssl.trustStore");
          String trustStoreType_tREST_1 = System
                  .getProperty("javax.net.ssl.trustStoreType");
          String trustStorePWD_tREST_1 = System
                  .getProperty("javax.net.ssl.trustStorePassword");
  
          String keyStoreFile_tREST_1 = System
                  .getProperty("javax.net.ssl.keyStore");
          String keyStoreType_tREST_1 = System
                  .getProperty("javax.net.ssl.keyStoreType");
          String keyStorePWD_tREST_1 = System
                  .getProperty("javax.net.ssl.keyStorePassword");
  
          com.sun.jersey.api.client.config.ClientConfig config_tREST_1 = new com.sun.jersey.api.client.config.DefaultClientConfig();
          javax.net.ssl.SSLContext ctx_tREST_1 = javax.net.ssl.SSLContext
                  .getInstance("SSL");
  
          javax.net.ssl.TrustManager[] tms_tREST_1 = null;
          if (trustStoreFile_tREST_1 != null
                  &amp;&amp; trustStoreType_tREST_1 != null) {
              char[] password_tREST_1 = null;
              if (trustStorePWD_tREST_1 != null)
                  password_tREST_1 = trustStorePWD_tREST_1.toCharArray();
              java.security.KeyStore trustStore_tREST_1 = java.security.KeyStore
                      .getInstance(trustStoreType_tREST_1);
              trustStore_tREST_1.load(new java.io.FileInputStream(
                      trustStoreFile_tREST_1), password_tREST_1);
  
              javax.net.ssl.TrustManagerFactory tmf_tREST_1 = javax.net.ssl.TrustManagerFactory
                      .getInstance(javax.net.ssl.KeyManagerFactory
                              .getDefaultAlgorithm());
              tmf_tREST_1.init(trustStore_tREST_1);
              tms_tREST_1 = tmf_tREST_1.getTrustManagers();
          }
  
          javax.net.ssl.KeyManager[] kms_tREST_1 = null;
          if (keyStoreFile_tREST_1 != null
                  &amp;&amp; keyStoreType_tREST_1 != null) {
              char[] password_tREST_1 = null;
              if (keyStorePWD_tREST_1 != null)
                  password_tREST_1 = keyStorePWD_tREST_1.toCharArray();
              java.security.KeyStore keyStore_tREST_1 = java.security.KeyStore
                      .getInstance(keyStoreType_tREST_1);
              keyStore_tREST_1.load(new java.io.FileInputStream(
                      keyStoreFile_tREST_1), password_tREST_1);
  
              javax.net.ssl.KeyManagerFactory kmf_tREST_1 = javax.net.ssl.KeyManagerFactory
                      .getInstance(javax.net.ssl.KeyManagerFactory
                              .getDefaultAlgorithm());
              kmf_tREST_1.init(keyStore_tREST_1, password_tREST_1);
              kms_tREST_1 = kmf_tREST_1.getKeyManagers();
          }
  
          ctx_tREST_1.init(kms_tREST_1, tms_tREST_1, null);
          config_tREST_1
                  .getProperties()
                  .put(com.sun.jersey.client.urlconnection.HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
                          new com.sun.jersey.client.urlconnection.HTTPSProperties(
                                  new javax.net.ssl.HostnameVerifier() {
  
                                      public boolean verify(
                                              String hostName,
                                              javax.net.ssl.SSLSession session) {
                                          return true;
                                      }
                                  }, ctx_tREST_1));
  
          com.sun.jersey.api.client.Client restClient_tREST_1 = com.sun.jersey.api.client.Client
                  .create(config_tREST_1);
          com.sun.jersey.api.client.WebResource restResource_tREST_1;
          if (endpoint_tREST_1 != null &amp;&amp; !("").equals(endpoint_tREST_1)) {
              restResource_tREST_1 = restClient_tREST_1
                      .resource(endpoint_tREST_1);
          } else {
              throw new IllegalArgumentException("url can't be empty!");
          }
  
          com.sun.jersey.api.client.ClientResponse errorResponse_tREST_1 = null;
          String restResponse_tREST_1 = "";
          try {
  
              restResponse_tREST_1 = restResource_tREST_1
  
              .get(String.class);
  
          } catch (com.sun.jersey.api.client.UniformInterfaceException ue) {
              errorResponse_tREST_1 = ue.getResponse();
          }
  
          // for output
  
          row1 = new row1Struct();
          if (errorResponse_tREST_1 != null) {
              row1.ERROR_CODE = errorResponse_tREST_1.getStatus();
          } else {
              row1.Body = restResponse_tREST_1;
          }
  
          /**
           * [tREST_1 begin ] stop
           */
  
          /**
           * [tREST_1 main ] start
           */
  </code></pre>
  
  <p>Any help would be very appreciated :). All my examples are about that tutorial but while I was trying to get our real API to work with ETL I just got the exact same problems and I guess this tutorial is easier to give you guys as an example.</p>