javax.xml.ws.WebServiceException: impossible d'accéder au fichier WSDL. Réponse: '401: Non Autorisé"
Je suis en train d'essayer d'accéder à un service web pour un projet que je suis en train de travailler sur. Je suis à l'aide de JAX-WS et l'application est déployée sur weblogic. Lorsque j'essaye d'accéder à la WS, j'obtiens l'exception suivante:
javax.portlet.PortletException: javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://xxx.xxxx.ro:40000/idm/ws/cup?wsdl. It failed with:
Response: '401: Unauthorized' for url: 'http://xxx.xxxx.ro:40000/idm/ws/cup?wsdl'.
at com.bea.portlet.container.PortletStub.processAction(PortletStub.java:346)
at com.bea.portlet.container.AppContainer.invokeProcessAction(AppContainer.java:678)
........
J'ai lu beaucoup de messages concernant la question et j'ai essayé différents types de auth. J'ai essayé d'utiliser BindingProvider, basicHTTPAuth dans différents usecases, désactiver HostnameVerifier etc. mais toujours sans résultat.
Ci-dessous est un extrait de mon code, comme la dernière essayé la version:
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
username,
password.toCharArray());
}
});
ComputeUserProfileImplService computeUserProfileImplService = new ComputeUserProfileImplService(
new URL(null, endpointURL, new sun.net.www.protocol.http.Handler()),
new QName("http://xxx.xx.xxxxx.xxxxx.com/",
"ComputeUserProfileImplService"));
ComputeUserProfileImpl computeUserProfile = computeUserProfileImplService
.getComputeUserProfileImplPort();
La ComputeUserProfileImplService à quoi ressemble le code :
private final static URL COMPUTEUSERPROFILEIMPLSERVICE_WSDL_LOCATION;
private final static Logger logger = Logger.getLogger(com.xxxxx.xxxxx.xx.xxxxx.cup.ComputeUserProfileImplService.class.getName());
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.xxxxx.xxxxx.xx.xxxxx.xxx.ComputeUserProfileImplService.class.getResource("");
url = new URL(baseUrl, "http://xxxx.xxxxx.ro:40000/idm/ws/cup?wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'xxxxxxxxxxxxxxxx', retrying as a local file");
logger.warning(e.getMessage());
}
COMPUTEUSERPROFILEIMPLSERVICE_WSDL_LOCATION = url;
}
Désolé pour remplacer les liens, mais je ne suis pas autorisé à poster car il est assez connu de l'organisation.. Si vous pouvez m'aider avec des suggestions, je vous en seront reconnaissants. Je continue la recherche de solutions, mais je suis coincé.. je ne peux pas le comprendre. Il devrait être une solution de contournement pour ce weblogic problème que moi... mais je ne peux pas le trouver. Si vous en avez besoin, je vais poster quelques autres extraits. Espère que j'ai été assez clair avec ce.
Merci d'avance !!
Vous devez vous connecter pour publier un commentaire.
Malheureusement Weblogic a une approche différente, il utilise son propre URLStreamHandler que, pour quelque raison ignore l'authentification.
Essayez d'utiliser du Soleil de mise en œuvre:
au lieu de
utilisation
J'ai eu le même problème dans Weblogic.
Je peux vous confirmer que la solution proposée par Paulius Matulionis a travaillé pour moi dans Weblogic 11:
Je n'ai pas essayer dans WebLogic, mais sur Tomcat, Glassfish, Apache Karaf, le cliet appel de service web qui a besoin de l'authentification de base, cela fonctionne tout simplement génial:
Je ne pense pas que WebLogic a quelque chose de différent. Cela devrait fonctionner.
Ce qui suit sont des suggestions qui pourraient permettre de résoudre votre problème:
1) Variation de la WEBLOGIC script setDomainEnv.sh à force de WEBLOGIC pour utiliser
SunHttpHandler
.ou
2) Appeler le service web à partir de l'invite de commande à l'aide d'un shell script ou un fichier de commandes.
ou
3) Essayez cette url objet dans votre webservice
new URL(null, "http://...", new sun.net.www.protocol.http.Handler());
ou
4) Écrire votre propre soleil gestionnaire http.
ou
5) Essayez de mettre à jour votre weblogic-webservice.xml en ajoutant votre nouvellement créé un webservice en elle.
ou
6), Essayez d'utiliser jax-rpc au lieu de jax-ws.
Nous espérons que chacune des deux premiers de résoudre votre problème, cependant, d'autres options sont également utiles.