2017-09-25 14 views
0

notre blog Essayé la recherche, mais n'a pas pu trouver quelques conseils si l'affichage,Regd httpclient.executeMethod (request); jette un IOException sur le serveur, alors que fonctionne sur Eclipse locale

Je viens de travailler sur un code de méthode httpsClient Post ci-dessous et face IOException. petits pointeurs peuvent aider, ne nécessitent pas de réponses détaillées.

HttpClient httpclient = new HttpClient();   
       request = new PostMethod("https://ref.net/auth/token?grant_type=password");    
       request.setRequestHeader("Authorization", "Basic KolokYrZTo="); 
       request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 

      NameValuePair[] data = { 
        new NameValuePair("username", "abc"), 
        new NameValuePair("password", "123"), 
        new NameValuePair("grant_type", "password"), 
      }; 

      request.setRequestBody(data); 
      httpclient.executeMethod(request); 
} catch (IOException e) { 
        e.printStackTrace(); 
        logger.error("IOException in post()...."+e.getMessage());     
       } 

Je courais ce code sur Eclipse avec commons-httpClient 3.1.jar il fonctionne parfaitement bien, mais quand je déplace mon code au serveur et essayez d'exécuter le même code, le httpclient.executeMethod(request); throws IOException. À ma grande surprise le e.printStackTrace(); ne s'imprime pas comme e objet lui-même est null Comment puis-je attraper cette exception et déboguer cela, je fais quelque chose de mal ici.

Sur mon local, j'ai Java1.8 mais fonctionne au niveau de conformité du compilateur 1.6- Sur le serveur. J'ai essayé de courir à la fois 1.8 et 1.6 même erreur.

+0

est-il lié à certains certificats, que nous pouvons avoir à configurer sur le serveur et sont présents sur le local?, Je n'ai ajouté aucun certificat si –

+0

Si 'e' est vraiment' null' comme vous le dites, le tout devrait par la suite, lancez une exception 'NullPointerException' quand vous faites' e.printStackTrace' donc j'ai des doutes que c'est effectivement le cas. Je suppose que vous faites référence à ce que vous voyez dans votre journal. Mais là vous ajoutez juste 'e.getMessage()' qui pourrait être nul. Consignez l'exception complète (de sorte que le type d'exception soit levé et que la pile empilée soit également enregistrée) et ajoutez-la ici, afin de pouvoir en dire plus sur votre problème. – Lothar

+0

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Échec de la construction du chemin PKIX: sun.security.provider.certpath.SunCertPathBuilderException: impossible de trouver le chemin de certification valide vers la cible demandée at sun.security.ssl.Alerts .getSSLException (Alerts.java:192) à sun.security.ssl.SSLSocketImpl.fatal (SSLSocketImpl.java:1937) à sun.security.ssl.Handshaker.fatalSE (Handshaker.java:302) –

Répondre

0

Avec le message d'erreur que vous avez ajouté comme commentaire, il est clair ce qui se passe ici. Le serveur auquel vous vous connectez utilise un certificat de serveur que la machine virtuelle Java que vous utilisez dans le shell de commande ne sait pas.

Si vous recherchez ce message d'erreur en combinaison avec commons httpclient, vous pouvez trouver quelques pages de discussion, par exemple. un au StackOverflow.