2010-11-23 7 views
1

J'essayais de se connecter avec WSClient groovy au serveur Exchange wsdl, mais ne peut pas parce que je reçois un fichier vide (quand je veux analyser le wsdl). J'utilise les lignes suivantes:WSClient ne peut pas se connecter échange wsdl sur https

Map mapClient=[ 
        "https.truststore":"/path/jssecacerts", 
        "https.truststore.pass":"changeit", 
        "https.keystore":"/path/cacerts", 
        "https.keystore.pass":"changeit" 
    ] 

    def proxy=new WSClient("https://mail.exchangeserver:443/ews/services.wsdl", this.class.classLoader) 
    proxy.setSSLProperties(mapClient) 
    proxy.setBasicAuthentication("user","password") 
    proxy.initialize() 

Il ne parvient essentiellement à proxy.initialize() à cause de l'erreur d'analyse XML sur un fichier vide. Cependant, lorsque j'utilise le navigateur, j'ai le fichier wsdl complet.

Ce n'est pas la poignée de main SSL, parce que je me suis battu pendant des heures pour le faire fonctionner. C'était la première erreur que j'ai eu ...

Je pense que c'est l'authentification de base qui est fausse pour une raison quelconque. La raison pour laquelle je dis cela est: je peux commenter la ligne d'authentification et j'ai le même résultat.

Des indices?

+0

Quelle version de WSClient et Groovy utilisez-vous? –

Répondre

2

Ok, d'un autre forum, j'ai eu ma réponse. Il s'agit d'une limitation connue d'Apache CXF (le backend de groovy WSClient) et il n'utilise les informations d'identification que lors de l'utilisation du service web, et non lors de l'extraction du fichier wsdl! La solution consiste à charger le wsdl localement et construire le WSClient en utilisant:

new WSClient(this.class.classLoader.getResource("services.wsdl").toExternalForm(), 
      this.class.classLoader) 

pour ceux qui utilisent l'échange webservice, il est pas fini! Vous devez corriger certaines erreurs ainsi:

  • télécharger le messages.xsd et Types.xsd ainsi que le services.wsdl
  • fixer le Types.xsd remplaçant la ligne

    <xs:import namespace="http://www.w3.org/XML/1998/namespace"/> 
    

par

<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> 

et enfin fixer le services.wsdl ajouter un wsdl: étiquette de service

<wsdl:service name="ExchangeWebService"> 
    <wsdl:port name="ExchangeWebPort" binding="tns:ExchangeServiceBinding"> 
     <soap:address location="https://myserver/EWS/exchange.asmx" /> 
    </wsdl:port> 
    </wsdl:service> 

Voilà, il devrait maintenant s'initialiser correctement!

Questions connexes