L'appel de service web qui se trouve sur un équilibreur de charge avec jax-ws renvoie au statut http 302, mais lorsque j'utilise SoapUI, il fonctionne très bien
Quand je l'appelle un service web qui se trouve sur un équilibreur de charge avec jax-ws, il retourne
Le serveur a envoyé le code d'état HTTP 302: Déplacé Temporairement
et ne parvient pas, mais quand j'utilise SoapUI, il fonctionne très bien.
Est-il possible que je peux configurer le service pour gérer cela correctement?
J'ai généré le webservice code à l'aide de wsimport
et prendre l'appel en tant que tel
NotificationWebService service = new NotificationWebService(wsdlLocation, qName);
NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();
String xmlString = serviceSoap.getRSAPublicKeyXMLString();
Je suis coincé et je n'ai pas été en mesure de trouver une solution, n'importe où, de sorte que toute aide serait appréciée.
- peut-être liés: stackoverflow.com/questions/2581486/... et stackoverflow.com/questions/2573858/...
- Essayez de trouver "Suivre" Redirection de propriété dans SoapUI et l'activer.
- Merci, j'avais regardé ces deux billets, et aucun d'entre eux ont en fait donné une solution pour traiter l'erreur 302.
Vous devez vous connecter pour publier un commentaire.
Donc, après beaucoup de recherches, j'ai enfin compris quel était le problème. Il était à la redirection http vers https. À partir d'articles que j'ai trouvé sur le web (ne me souviens pas les url plus), c'est que les bibliothèques que les wsdl2java et wsimport stub générateurs utiliser pour faire le webservice de communication ne permettent pas à une redirection http vers https suivre pour des raisons de sécurité.
Donc même si j'ai été générer les stubs de un https emplacement wsdl ie. https://wsdl.location.com?wsdl, quand j'ai couru le code pour faire un webservice appel, il essayait de faire l'appel à http://wsdl.location.com qui a abouti à une demande de redirection pour https://wsdl.location.com, Mais le http bibliothèque ne le permet pas. Donc, il transfère simplement le code http 302 comme une exception.
Aussi, il y a deux web-url de service. L'un est un service de test, ce qui est normal url http et puis il y a un serveur de production qui est sur https. Afin de contourner ce est tout ce que je fait est de configurer le service à la volée pour utiliser le point final j'ai spécifié (qui est maintenant l'adresse https) à l'aide de la BindingProvider classe. Cela me permet aussi de spécifier à la volée en fonction de l'environnement qui fait appel, pour utiliser le test de l'url ou la production d'un ie.
Donc en bref, si quelqu'un rencontre ce problème. Assurez-vous que si le point de fin vous avez besoin de point de est sur https, que vous êtes de faire un direct https appel et non pas un appel http qui va demander une redirection https. Vous pouvez le vérifier en examinant les serviceSoap pendant le débogage. Il va dire à l'url c'est de faire l'appel.
Je n'ai pas regarder ou aller avec la possibilité de configurer wsdl2java et wsimport pour générer les stubs et force les bouchons d'utiliser le https appeler pour que je puisse configurer plusieurs url de points pour les différents environnements.
Oui. Vous n'avez pas dit ce que vous utilisez pour le transport, mais si c'est quelque chose comme HttpClient vous devez le configurer pour suivre les redirections. Vous devrez peut-être jouer avec le code généré automatiquement, ou sinon, peut-être essayer un niveau plus élevé d'abstraction, comme le Printemps ou les Services Web CXF.
NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();
, il doit s'assurer qu'il n'sur https.Raison est la question redirection sur le web service de contrôle de l'appel obtient transféré à partir de HTTP vers HTTPS. Modifier votre fichier WSDL, vous trouverez le code ci-dessous:
code original:
code modifié:
Il suffit de changer l'emplacement de l'attribut HTTP, HTTPS et générer le nouveau talon en utilisant le changement de l'emplacement du fichier WSDL.