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 CXF + WS-security + SSL


Sujet :

Services Web Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Par défaut Client CXF + WS-security + SSL
    Salutation,


    je fais appel à votre aide pour résoudre mon problème.

    Mon objectif est le développement d'un client pour un service SOAP.
    Je dispose de :

    Endpoint address,
    WSDL,
    Target namespace
    J'ai également le user/password.

    Tout fonctionne pour le mieux dans SoapUI.



    Maintenant concernant le client java :
    Le SSL ne semble plus me poser de problème depuis l'ajout du certificat (keystore).

    Le problème semble s'orienter vers ws-security.
    J'ai essayé divers code, renvoyant des erreurs différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
    		Map outProps = new HashMap();
    		outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
    		outProps.put(WSHandlerConstants.USER, USER);
    		outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
    		outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordCallback.class.getName());
     
    		factory.setJaxbContextProperties(outProps);
    		Client client = factory.createClient(WSDL);
     
    		client.invoke("getX", "param");

    l'erreur renvoyée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: org.xml.sax.SAXParseException: Both jaxb:version and version are present



    autre code tenté :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
    		factory.setServiceClass(MyObj.class);
    		factory.setAddress(ENDPOINT);
    		factory.setUsername(USER);
    		factory.setPassword(PWD);
    		MyObj client = (MyObj) factory.create();
    		client.getX("param");
    L'erreur renvoyée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.apache.cxf.binding.soap.SoapFault: An error was discovered processing the <wsse:Security> header


    Une autre expérience :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setServiceClass(MyObj.class);
    factory.setUsername(USER);
    factory.setPassword(PWD);
    factory.setAddress(ENDPOINT);
    MyObj client = (MyObj) factory.create();
    client.getX("param");

    erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.xml.ws.soap.SOAPFaultException: An error was discovered processing the <wsse:Security> header


    Une autre ...


    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
     
     
    Service service = Service.create(SERVICE_NAME);
    service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, ENDPOINT);
    MyObj hw = service.getPort(MyObj.class);	    
    Client client = ClientProxy.getClient(hw);
    Endpoint cxfEndpoint = client.getEndpoint();
     
    Map<String,Object> outProps= new HashMap<String,Object>();
    outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
     
    outProps.put(WSHandlerConstants.USER, USER);
    outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
    outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordCallback.class.getName());
    WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
    cxfEndpoint.getOutInterceptors().add(wssOut);
     
    System.out.println(hw.getX("param"));

    erreur renvoyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: java.net.MalformedURLException: Invalid address. Endpoint address cannot be null.
    notez qu'en fait ENDPOINT n'est pas nul...



    Voila, j'ai fait le tour des solutions et pas de résultat potable. Le plus triste étant que cela fonctionne sans problème sous SoapUI...

    J'accepterais volontiers l'aide d'une âme charitable

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1
    Par défaut
    >>Caused by: org.xml.sax.SAXParseException: Both jaxb:version and version are present

    Probablement un bug de JAXP dans JDK 6
    https://jaxp.dev.java.net/issues/show_bug.cgi?id=63

    Le contournement - si on peut dire - est pour moi d'éditer
    org/apache/cxf/endpoint/dynamic/simple-binding.xjb

    et de remplacer

    jaxb:version="2.0"
    par
    version="2.0"

    Bruno Grieder
    http://www.amalto.com/

Discussions similaires

  1. Client Java et connexion SSL
    Par Nico02 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 14/06/2014, 19h33
  2. CXF-Maven, Client WSDL2java via SSL certificat
    Par makroute dans le forum Services Web
    Réponses: 3
    Dernier message: 14/04/2011, 12h48
  3. client Gsoap avec Https (SSL)
    Par Yiempia dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 04/03/2011, 14h40
  4. Réponses: 0
    Dernier message: 03/04/2010, 00h40
  5. [SSL] creer un client authentifié
    Par pmartin8 dans le forum Sécurité
    Réponses: 2
    Dernier message: 17/06/2005, 16h30

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