IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Erreur d'appel à un Web Service avec une authentification HTTP basic


Sujet :

Services Web Java

  1. #1
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Par défaut Erreur d'appel à un Web Service avec une authentification HTTP basic
    Bonjour à tous,

    Je fais face à un problème que je ne comprends pas très bien. Je souhaite accéder à un Web Service nommé RP programmé en .NET (et déployé sur serveur IIS 7.5 sur Windows 2008 Server). Le service est protégé par une authentification HTTP, non seulement pour appeler le service mais également pour récupérer le WSDL.

    Mon client d'appel avait été fait sans authentification dans un premier temps, j'obtenais donc naturellement une erreur 401 tout en bas de ma trace d'erreur lorsque je tentais d'instancier mon service (les stubs sont créés de manière classiques par WSIMPORT).

    Voici le code qui établit la connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
          String name = this.properties.getProperty(ENDPOINT_NAME);
     
          URL url = (URL) this.properties.get(ENDPOINT_SERVICE_WSDL);
          QName serviceName = new QName(this.properties.getProperty(ENDPOINT_QNAME), name);
     
          if (LOG.isInfoEnabled()) {
            LOG.info("Attempting to instantiate Service(" + url + ", " + serviceName + ")");
          }
     
          Authenticator.setDefault(new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
              return new PasswordAuthentication("######", "######".toCharArray());
            }
          });
     
          ServiceRP rp = new ServiceRP(url, serviceName);
          this.rpService = rp.getRpsBinding();
     
          BindingProvider bp = (BindingProvider) this.rpService;
          Map<String, Object> requestContext = bp.getRequestContext();
          requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, this.properties.get(ENDPOINT_SERVICE));
          requestContext.put(BindingProvider.USERNAME_PROPERTY, "######");
          requestContext.put(BindingProvider.PASSWORD_PROPERTY, "######");
    Le champ properties contient les différentes adresses, namespace et autres informations nécessaires pour instancier le service.

    Mon code vient de cette page : http://etfdevlab.blogspot.com/2009/1...th-jax-ws.html

    J'ai réglé mon problème d'erreur 401 d'accès. Par contre, j'ai une nouvelle erreur dont voici le stack :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Caused by: java.lang.reflect.InvocationTargetException
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    	at ch.transformation.common.rps.dao.RpDAOImpl.getRpWsAdapter(RpDAOImpl.java:144)
    	... 109 more
    Caused by: javax.xml.ws.WebServiceException: Failed to access the WSDL at: #######. It failed with: 
    	Server redirected too many  times (20).
    	at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:162)
    	at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:144)
    	at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:264)
    	at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:227)
    	at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:175)
    	at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
    	at javax.xml.ws.Service.<init>(Service.java:56)
    	at ch.transformation.common.rpsclient.ServiceRP.<init>(ServiceRP.java:50)
    	at ch.transformation.common.rps.ws.RpServiceLocator.getRpService(RpServiceLocator.java:100)
    	at ch.transformation.common.rps.ws.RpWsAdapterImpl.<init>(RpWsAdapterImpl.java:48)
    	... 114 more
    Caused by: java.net.ProtocolException: Server redirected too many  times (20)
    	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1451)
    	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
    	at java.net.URL.openStream(URL.java:1010)
    	at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:805)
    	at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:262)
    	at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:129)
    	... 122 more
    Merci d'avance de vos suggestions, je sèche complètement...

    Meilleures salutations !

  2. #2
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Par défaut
    J'ai trouvé par hasard la solution sur le net : il fallait mettre DOMAIN\\USERNAME plutôt que directement le USERNAME dans cette ligne :

    return new PasswordAuthentication("######", "######".toCharArray());

    Le domaine n'est par contre pas requis dans le BindingProvider... étrange... et le message d'erreur sur la redirection était tout sauf clair...mais fonctionne dans l'état

    Salutations à tous

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut WebService avec authentification
    Bonjour,

    Je suis en train de développer un WebService avec authentification. J'ai lu beaucoup d'articles sur WSS et WSS4J mais je n'ai pas trouvé d'exemple réaliste.

    Pourriez-vous me dire, s'il vous plaît, d'où vous récupériez les propriétés ?

    Merci d'avance.

  4. #4
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Bonjour,
    Citation Envoyé par ameur1 Voir le message
    Pourriez-vous me dire, s'il vous plaît, d'où vous récupériez les propriétés ?
    Au vu du code, cela semble être simplement un fichier .properties chargé au démarrage de l'application. Cf. la classe Properties http://javasearch.developpez.com/j2s...roperties.html et sa méthode load.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler un web service avec pl/sql
    Par squalito dans le forum PL/SQL
    Réponses: 5
    Dernier message: 17/09/2012, 15h21
  2. Comment appeler un web service avec PHP en https
    Par teken-new dans le forum Langage
    Réponses: 1
    Dernier message: 22/06/2011, 10h10
  3. créer un web service avec une ui en silverlight
    Par pansoul dans le forum Silverlight
    Réponses: 6
    Dernier message: 14/08/2010, 03h38
  4. appel de web services avec les vba excel qui manipule les xsl.
    Par naim8622 dans le forum Services Web
    Réponses: 0
    Dernier message: 13/01/2009, 09h57
  5. Réponses: 2
    Dernier message: 23/05/2008, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo