2016-07-21 16 views
0

私はTalend Jaspersoft ETL Expressバージョン5.6の助けを借りてREST APIからデータベースにデータを取得しようとしています。 私の問題がサーバー構成に関係していないことを確認するために、ツールをローカルにインストールしてしまいました。私はJavaでよく経験していないが、彼の会社のためにこの実行を取得する必要がある学生ですので、私はあなたが私を助けることを願っています。私はいくつかの基本的な知識しか持っていないので、 "コード"タブで解決策を見つけようとはしませんでした。Talend:REST呼び出しは "URIが絶対ではありません"または "UnknownHostException"を返します

は最後に、私は次のチュートリアル試してみたかった: http://dwetl.com/2015/08/11/trest-use-case-example-use-rest-api-in-talend/ をしかし、それは私にとってあまりにも作品はありません。私は私のブラウザで私の呼び出しを使用してデータを取得することができますが、私はエラーが発生しているそのツールを使用しています。私はカットオフした場合

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.<init>(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] 

"https://で" その:一部として "api.github.com/users/mralexgray/followers" を使用し、私はUnknownHostExceptionがを得るURLとして "https://api.github.com/users/mralexgray/followers" と

私は、エラーがあなたにできるだけ多くの情報を提供する

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] 

「ウリは絶対的ではない」、ここで少しの部分が自動の外で取得するURLは私のために、このREST呼び出しについてであるように思われたJavaコードを生成しましたしかし、おそらく私は完全に間違っています、そして、私は基本的なものしか持っていないので、これはまったく役に立ちませんjavaの知識:

 /** 
     * [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 
       && 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 
       && 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 && !("").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 
     */ 

何か助けが非常に評価される:)。すべての私の例はそのチュートリアルですが、ETLで動作するように実際のAPIを手に入れようとしていたのですが、まったく同じ問題がありました。このチュートリアルは皆さんに例を挙げるほうが簡単です。

答えて

0

java.net.UnknownHostException:あなたがプロキシの背後にいるかどうかチェックしましたか?スタジオの位置からサイトにアクセスできない場合は、前のエラーが発生するはずです。

ブラウザがTalend Studioと同じ設定である必要はありません。だから、あなたの "インターネット設定"を確認して、既存のプロキシを確認してください。そうであれば、メニュー - ウィンドウ - >環境設定 - 一般 - >ネットワークでプロキシ設定を変更することができます。

+0

ありがとうございます。私は今日も会社にいるので、プロキシのことをできるだけ早く確認しました。私がC:\ WINDOWS \ System32 \ inetcpl.cplに行って、Connectionsタブを見ると何も設定されていないことがわかります。 LAN設定がプロキシサーバーに設定されているため、「ローカルアドレス用のプロキシサーバーを使用しない」のチェックを外しました。別のエラーが発生した場合、pastebinにアップロードしました。http://pastebin.com/ USZ4yraz セットアッププロキシが問題ないと思われるので、このボックスをチェックしたままにしておく必要があります。たぶん私はそれらのプロキシ設定で他の何かを試すことができますか? – Reik

+0

私は、そのチェックボックスをオフにしたので、エラーは違いないことに気付きました。このスレッドを作成したときに私が投稿したエラーメッセージは、ローカルインストールを使用していたからです。私のローカルプロキシ設定を確認すると、私の会社は私にその権利を与えてくれないので変更できない固定の "自動設定"があることがわかりました。 最終的に使用するサーバーでは、これは当てはまりませんが、手動でプロキシサーバーを使用します。それでも、このプロキシをオンまたはオフにすると、サーバーメッセージ(pastebin参照)に影響しないようです。 – Reik

+0

インターネット設定でプロキシが設定されている場合は、前のメッセージを書きますが、 TalendスタジオTalend Studioは自動的にプロキシのシステム設定を行いません。 – mhassine

1

最後に、接続の問題を解決する方法を見つけ出すことができました。 Talendがプロキシを手動で設定しても正しく設定されていないのはわかりませんが、tSetProxyコンポーネントを使用して動作し、期待されるJSONオブジェクトをサーバから取得します。

関連する問題