J'ai commencé un petit projet en Java. Mon code est comme suit: p> aide avec des exemples appropriés ou d'autres façons de faire cela. p> Erreurs de point / erreurs dans un code ci-dessus ou d'autres possibilités. P> Mon service Web est dans la structure Spring P> XML à envoyer est dans le format de la chaîne: requierxml p> p>
Je dois créer un client qui enverra XML à une URL en tant que demande de post HTTP.
Je l'essaie d'utiliser java.net. * Code> package (suivant est la pièce de code) mais je reçois une erreur comme suit:
5 Réponses :
Le problème est à l'intérieur de votre code de serveur ou de la configuration du serveur: p>
10.5.1
Erreur de serveur interne forte> p> Le serveur a rencontré une condition inattendue qui l'empêchait de remplir la demande. p> blockQuote>
( w3c.org/protocols ) p>
Si le serveur est sous votre contrôle (devrait être, si je regarde l'URL [avant la modification] em>), consultez les journaux du serveur. p>
Eh bien, vous devriez fermer vos flux et vos connexions. Maulage automatique des ressources de Java 7 ou http://projectlombok.org/ peut aider. Cependant, ce n'est probablement pas le problème principal. P>
Le problème principal est que le côté serveur échoue. Code http 500 signifie erreur côté serveur. Je ne peux pas vous dire la raison, parce que je ne connais pas la partie côté serveur. Peut-être devriez-vous regarder le journal du serveur. P>
Je pense que votre problème est que vous ouvrez le flux d'entrée avant d'avoir écrit et fermé le flux de sortie. Certes, le tutoriel Sun Est-ce de cette façon. P >
Si vous ouvrez le flux d'entrée trop tôt, il est possible que le flux de sortie soit fermé automatiquement, ce qui entraîne une demande de poste vide. Cela pourrait être suffisant pour que cela soit confus et envoyer une réponse de 500. p>
Même si ce n'est pas ce qui cause les 500 erreurs, c'est une bonne idée de faire des choses dans l'ordre indiqué dans le tutoriel. Pour un démarrage, si vous lisez accidentellement la réponse avant d'avoir terminé l'écriture de la demande, vous êtes susceptible de verrouiller (au moins temporairement) la connexion. (En fait, il semble que votre code le fait parce que vous ne fermez pas l'écrivain avant de lire du lecteur.) P>
Un problème distinct est que votre code ne ferme pas la connexion en toutes circonstances et est donc susceptible de fuir les connexions réseau. Si cela le fait à plusieurs reprises, il est susceptible de conduire à plus d'IOExceptions. P>
Le problème réside dans le code ci-dessous car le service peut ne pas toujours vous retourner la réponse appropriée ... car vous appelez un service via HTTP, il peut être possible que le serveur elle-même n'est pas disponible ou le service n'est pas disponible. Donc, vous devriez toujours vérifier le code de réponse avant de lire la réponse des flux, en fonction du code de réponse que vous devez décider de la lire à partir d'InputStream pour la réponse de réussite ou de ErrorStream pour une défaillance ou une condition d'exception. P> BufferedReader reader = null;
if(connection.getResponseCode() == 200)
{
reader = new BufferedReader(new
InputStreamReader(connection.getInputStream()));
}
else
{
reader = new BufferedReader(new
InputStreamReader(connection.getErrorStream()));
}
getResponecode, cette méthode existe-t-elle en fait? Je ne trouve pas ici - doc.oracle.com/ Javase / 7 / Docs / API / Java / Net / URLConnection.htm L
J'ai obtenu un objet de connexion à httpurlconnection, puis je pourrais obtenir le code de réponse.
Si vous appelez un service Web externe et en passant un JSON dans l'appel de repos, vérifiez le type de données des valeurs passées.
Exemple: p>
{ "originalReference":"8535064088443985", "modificationAmount": { "amount":"16.0", "currency":"AUD" }, "reference":"20170928113425183949", "merchantAccount":"MOM1" }
L'erreur HTTP 500 est "Erreur de serveur interne" une erreur générique renvoyée lorsque le service rencontre une erreur ou jette une exception. Vous voudrez peut-être lire l'organisme de réponse complet et voir si des informations supplémentaires
Code d'erreur 500 est une erreur de serveur interne. Je me concentrerais donc sur le serveur plutôt que le client.
Si votre URL est correcte (peut vérifier du navigateur), il n'y a pas beaucoup de choses que vous pouvez faire. Ressemble à une erreur latérale du serveur.