2017-03-11 7 views
2

私はhttp-getを介してXMLファイルを読み取る小さなprogrammを作成しました。apache httpgetが例外なしで破損する

これはうまく動作しています。なぜなら、空の結果の

しかし、それはnullポインタを除き、いかなる例外なく破壊し続けるサーバー上の

私は、Apache HTTP libにを使用しています。

ここにクラスがあります。正確なポイントを追跡するために、番号が追加されました。ここでは動作が停止します。

public void get(String url, String user, String pass, File outfile) throws IOException 
{ 
    log.info("1"); 
    CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
    credsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, "basic"), 
     new UsernamePasswordCredentials(user, pass)); 

    log.info("2"); 
    CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 

    HttpResponse response = null; 
    log.info("6"); 
    InputStream content = null; 
    FileOutputStream outputStream = null; 
    try 
    { 
     HttpGet httpGet = new HttpGet(url); 
     log.info("3"); 
     httpGet.addHeader("Content-Type", "text/xml"); 
     log.info("4"); 
     httpGet.addHeader("Accept", "text/xml"); 
     log.info("5"); 

     log.info("6"); 

     log.info("7"); 

     outputStream = new FileOutputStream(outfile); 
     log.info("8"); 
     response = httpClient.execute(httpGet); 
     log.info("9"); 
     log.info("response: {}", response); 
     log.info("10"); 
     content = response.getEntity().getContent(); 
     log.info("11"); 
     log.info("content: {}", content); 
     log.info("12"); 
     IOUtils.copy(content, outputStream); 
     log.info("13"); 
    } 
    catch (Exception e) 
    { 
     log.error("", e); 
    } 
    finally 
    { 
     try 
     { 
      log.info("14"); 
      log.info(String.valueOf(content)); 
      content.close(); 
      outputStream.close(); 
     } 
     catch (IOException e) 
     { 
      log.error("Error while closing Streams", e); 
     } 
    } 
} 

ログスナップショットは以下のとおりです。私はすべての賢明なデータをマスクすることを試みたと私は何も

Local log snipet

Remote log snipet

あなたが見ることができるように、数字は8後に停止し、最終的に14で再びブロックで開始を逃さなかった願っています。残りは欠けていて、私には分かりません。理由は何ですか?

使用されたURLには、ブラウザまたはcomandlineを介してアクセスできます。

+0

ありがとう、それはトリックでした。その欠けているorg/apache/commons/codec/binary/Base64。しかし、面白いことに、これはサーバー上でしか起こっていません。 – Eardy

+0

すぐに受け入れていただきありがとうございます。そして、あなたはちょうどupvote特権に達していいですね。私の答えでこれを行うことを練習することを自由に感じてください:-) – GhostCat

答えて

1

問題はちょっと難しいです:あなたは何らかの種類のエラーを実行しています。おそらくNoClassDefFoundErrorなんかかなんか。

しかし、例外を受け入れると、このコードは実際の問題を「表示」しません。

問題をデバッグするには、サーバーのログファイルをチェックするか、例外の代わりにThrowableをキャッチするようにコードを変更します。

関連する問題