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 :

Client java pour web services en WCF, problème d'identification


Sujet :

Services Web Java

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Points : 54
    Points
    54
    Par défaut Client java pour web services en WCF, problème d'identification
    Bonjour.
    Je suis novice en web services et je tente de faire un client basique en java pour tester un web services WCF codé avec C# qui utilise une basic authentication.

    Je pense avoir réussi à créer un jar avec les méthodes en utilisant la commande suivante :
    wsimport -d d:\test\ -clientjar d:\test\ws.jar -extension -Xauthfile d:\test\auth.txt -keep https://webservice.int:443/serveurws.svc
    Ensuite j'ai tenté de créer un client avec eclipse.
    Pour m'entrainer j'avais créer un client webservices en wsdl sans authentification avec succès.
    Mais là je suis bloqué.

    A priori pour appeler mon web service je dois faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class test_ws{
        public static void main(String[] args) {        
    		ServeurWS service = new ServeurWS();
    		IServeurWS port = service.getServeurWSEndpoint();
                    System.out.println(port.searchForInfo("14230"));
        }
     
    }
    En théorie c'est bon.
    Seulement évidemment cela ne fonctionne pas car il n'y a pas d'authentification (erreur 401)
    Et la je bloque...
    J'ai tenté de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		String adresse = "https://webservice.int:443/serveurws.svc";
    			Call call = (Call) (new Service()).createCall();
    			call.setTargetEndpointAddress(new java.net.URL(adresse));
    			call.setProperty(Call.USERNAME_PROPERTY, "login");
    			call.setProperty(Call.PASSWORD_PROPERTY, "mot_de_passe");
                    ServeurWS service = new ServeurWS();
    		IServeurWS port = service.getServeurWSEndpoint();
                    System.out.println(port.searchForInfo("14230"));
    Mais je n'arrive pas à invoquer la méthode searchForInfo de cette manière.
    J'ai essayé avec la commande invoke mais je n'arrive pas à comprendre comment on lui passe le nom de la méthode à invoquer et comment lui faire passer un paramètre.

    J'ai essayé aussi de cette manière sans plus de succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                   ServeurWS service = new ServeurWS();
    		IServeurWS port = service.getServeurWSEndpoint();
    		BindingProvider bindingProvider = (BindingProvider) port;
    		bindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "login");
    		bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "mot_de_passe"); 
                    System.out.println(port.searchForInfo("142301875"));
    Soit j'ai une erreur 401 soit j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: MustUnderstand headers:[{http://www.w3.org/2005/08/addressing}Action] are not understood
    La j'avoue être bloqué.. j'ai écris aux fournisseurs du service mais il ne connaisse que le C# et ne peuvent pas me donner d'exemple de code en java...

    Pourtant ça doit pas être bien sorcier...
    Quelqu'un sait comment faire une authentification basique en java pour un tel web service ?

  2. #2
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Points : 54
    Points
    54
    Par défaut
    Je complète un peu mes tests.

    Voici ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                    String adresse = "https://webservice.int:443/serveurws.svc";
    		Call call = (Call) (new Service()).createCall();
    		call.setTargetEndpointAddress(new java.net.URL(adresse));
    		call.setProperty(Call.USERNAME_PROPERTY, "login");
    		call.setProperty(Call.PASSWORD_PROPERTY, "mot_de_passe");
                    call.addParameter( "chaine", XMLType.SOAP_STRING, ParameterMode.IN);
    		call.setReturnType(XMLType.SOAP_STRING);
    		String r =(String) call.invoke("searchForInfo", new Object[] { "14230"});
                    System.out.println(r);
    Cela ne fonctionne pas j'ai l'erreur suivante :
    AxisFault
    faultCode: {http://xml.apache.org/axis/}HTTP
    faultSubcode:
    faultString: (415)Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
    faultActor:
    faultNode:
    faultDetail:
    {}:return code: 415
    The server cannot service the request because the media type is unsupported.
    {http://xml.apache.org/axis/}HttpErrorCode:415

    (415)Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.
    J'ai tenté de changer le xmltype mais ça n'a rien changé, l'erreur reste la même.

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Points : 54
    Points
    54
    Par défaut
    Bon c'était pas de la tarte mais j'ai finalement réussi.

    Si jamais ca peut servir voila comment j'ai fais.

    Tout d'abord j'ai téléchargé soapui. J'ai réussi en suivant des tuto à tester le service web via le logiciel. Puis j'ai utilisé soapui et axis 2 pour générer le code java nécessaire au client.
    Les classes n'était pas du tout les mêmes qu'avec wsimport.

    Ensuite j'ai eu 2 soucis (toujours les mêmes) l'authentification et le header.
    Le code pour me connecter est en fait le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MonWSStub stub;
    		// connexion 
    		stub = new MonWSStub ();	
    	    Options options = stub._getServiceClient().getOptions();
    	    HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
    	    auth.setPreemptiveAuthentication(true);
    	    auth.setUsername("login");
    	    auth.setPassword("mot_de_passe");
    	    options.setProperty(HTTPConstants.AUTHENTICATE,auth);
    	    options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, AddressingConstants.Final.WSA_NAMESPACE);
    	    ServiceClient sc = stub._getServiceClient();
    	  	sc.engageModule("addressing");
    Oui il faut tout ça a priori...
    Mais ça n'a pas suffit, il a fallu que je rajoute une option dans le run d'eclipse sinon on ne peut pas engager le module "addressing" :
    -Daxis2.repo="D:\axis2-1.6.3\repository"
    (cela dit il y a surement d'autres moyens)

    Et finalement j'ai pu me connecter et consommer le web service.
    Bon sauf que le retour était un objet et que pour accéder à la donnée c'est une horreur car je dois faire 4 ou 5 get de suite sur l'objet pour arriver sur une donnée...
    Il y a surement un moyen plus simple pour transformer le contenu de l'objet en une string contenant du xml mais je ne le connais pas et bon finalement ça fonctionne...

    Donc résolu !
    si ça peut aider quelqu'un...

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

Discussions similaires

  1. Définir MaxReceivedMessageSize pour Web Service non WCF
    Par theMonz31 dans le forum Services Web
    Réponses: 2
    Dernier message: 29/04/2013, 13h22
  2. Réponses: 0
    Dernier message: 20/04/2012, 10h36
  3. erreur client java sur web service php
    Par cotede2 dans le forum Services Web
    Réponses: 0
    Dernier message: 30/09/2010, 21h29
  4. Réponses: 1
    Dernier message: 12/02/2007, 15h22

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