2017-03-11 2 views
2

Ich schrieb ein kleines Programm, das eine XML-Datei über http-get liest.apache httpget bricht ohne Ausnahme

Loacally läuft es gut.

Aber auf dem Server ohne Ausnahme es hält brechen, mit Ausnahme einer Nullpointer wegen des leeren Ergebnisses

Ich bin mit dem Apache HTTP-lib.

Hier ist die Klasse, ich habe die Nummern hinzugefügt, um den genauen Punkt zu verfolgen, wo es nicht mehr funktioniert.

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); 
     } 
    } 
} 

Hier sind die Protokoll Snipets; Ich habe versucht, alle sensiblen Daten zu maskieren, und ich hoffe, dass ich nichts

Local log snipet

Remote log snipet

entging Wie Sie sehen können, die Zahlen nach 8 starten und stoppen in der schließlich wieder blockieren mit 14. der Rest fehlt und ich habe keine Ahnung, warum.

Die verwendete URL ist über Browser oder Comandline erreichbar.

+0

danke, das hat den Trick gemacht. Es fehlt org/apache/commons/codec/binary/Base64. Aber es ist interessant, dass dies nur auf dem Server passiert. – Eardy

+0

Danke für die schnelle Annahme. Und oh schön, du hast gerade die Upvote-Privilegien erreicht. Fühlen Sie sich frei, dies auf meine Antwort zu tun :-) – GhostCat

Antwort

1

Das Problem ist ein bisschen knifflig: Sie laufen in eine Art von Fehler hier. Wahrscheinlich NoClassDefFoundError oder etwas ähnliches.

Aber wie Sie für Exception fangen dieses Stück Code einfach nicht "sehen" das eigentliche Problem.

So, um das Problem zu debuggen: entweder überprüfen Sie die Server-Protokolldateien oder ändern Sie Ihren Code, um Throwable statt Ausnahme zu fangen.