Forums : Plateforme Mozilla

Aller à la discussion :  Plus récente Plus ancienne

# Problème WSDL-Axis

Envoyé par : woogluf

Date : 27/01/2006 14:54

Bonjour,

Je suis en cours d'expérimentation des services SOAP via la création de proxy. J'utilise une méthode similaire à l'exemple de BabelFish.

Mon serveur est le couple Jetty/Axis.

J'ai été obligé d'utiliser le paramètre dotNetSoapEncFix, qui permet de ne pas utiliser l'encodage soap, et je suis finalement parvenu à publier un service accéssible depuis Mozilla.

Ce service est simple (appel d'une méthode prenant un entier en paramètre et retournant un entier).

Je bloque sur la création d'une méthode retournant un type complexe.

Ce type apparaît correctement dans le wsdl générer pas axis dont voici un extrait :

<wsdl:types>
	<schema targetNamespace="someNamespace">
		<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
		<complexType name="local">
			<sequence>
				<element name="id" nillable="true" type="xsd:string"/>
				<element name="titre" nillable="true" type="xsd:string"/>
			</sequence>
		</complexType>
	</schema>
</wsdl:types>

Lors de l'appel au service, rien ne ce passe (pas d'appel à la méthode de gestion d'erreurs, ni à la méthode de rappel de retour et pas d'erreur dans ma console javascript).

J'ai recherché des exemples de services soap retournant des types complexes (et utilisant le proxy wsdl), sans succès.

Quelqu'un à t-il déjà expérimenter ce type de service ?

Merci d'avance.

PS : j'utilise firefox 1.5

# Re: Problème WSDL-Axis

Envoyé par : woogluf

Date : 29/01/2006 10:16

J'ai enfin réussi à utiliser les services soap avec des types complexes.

Mozilla présente quelques limitations quand l'utilisation des services web :

  • il ne supporte pas les soapenc (d'ou l'utilisation du paramètre dotNetSoapEncFix);
  • il ne reconnait pas les multiref (il faut donc mettre le paramètre sendMultiRefs à faux);
  • il ne supporte pas les types complexes en séquence <sequence>, il faut donc renvoyer des types en utilisant la balise <all>, l'extrait wsdl précédent donc ressembler à ça :
<wsdl:types>
	<schema targetNamespace="someNamespace">
		<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
		<complexType name="local">
			<all>
				<element name="id" nillable="true" type="xsd:string"/>
				<element name="titre" nillable="true" type="xsd:string"/>
			</all>
		</complexType>
	</schema>
</wsdl:types>

Cela signifie qu'on ne peut utiliser le BeanSerializerFactory d'Axis, et que l'on est obligé d'implémenter son propre sérialiseur.

Voila, en espérant que cela puisse servir à quelqu'un.

# Re: Problème WSDL-Axis

Envoyé par : Utilisateur anonyme

Date : 09/02/2006 17:13

Salut,

Est-ce que tu pourrais mettre un exemple de comment tu fais la requête SOAP sous Mozilla. Au niveau de la forme des paramètres à passer aux fonctions générées par le proxy.

Voici à quoi ressemble le WSDL généré par Axis, que j'ai légèrement modifié :

<defintions>
<types>
 <schema>
  <element name="logUserIn">
   <complexType>
    <all>
     <element name="login" type="xsd:string"/>
     <element name="password" type="xsd:string"/>
    </all>
   </complexType>
  </element>
  ...
 </schema>
</types>
<wsdl:message name="logUserInRequest">
 <wsdl:part element="tns1:logUserIn" name="parameters"/>
</wsdl:message>
<wsdl:portType name="Calendar">
     <wsdl:operation name="logUserIn">
        <wsdl:input message="impl:logUserInRequest" name="logUserInRequest"/>
        <wsdl:output message="impl:logUserInResponse" name="logUserInResponse"/>
     </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CalendarSoapBinding" type="impl:Calendar">
     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
     <wsdl:operation name="logUserIn">
        <wsdlsoap:operation soapAction=""/>
        <wsdl:input name="logUserInRequest">
           <wsdlsoap:body use="literal"/>
        </wsdl:input>
        <wsdl:output name="logUserInResponse">
           <wsdlsoap:body use="literal"/>
        </wsdl:output>
     </wsdl:operation>
</wsdl:binding>
<wsdl:service name="CalendarService">
     <wsdl:port binding="impl:CalendarSoapBinding" name="Calendar">
       <wsdlsoap:address location="http://localhost:8180/obm-server/services/Calendar"/>
     </wsdl:port>
  </wsdl:service>
</definitions>

Et il faudrait donc qu'une requête SOAP envoyée par Mozilla ressemble à :

<SOAP-ENV:Body><authmethod:logUserIn><login>r2</login><password>4b43b0aee35624cd95b910189b3dc231</password></authmethod:logUserIn></SOAP-ENV:Body></SOAP-ENV:Envelope>

Au lieu de ça, il envoie :

<env:Body><logUserIn><ns1:logUserIn xmlns:ns1="http://obm.aliacom.fr/auth-method" xsi:type="ns1:"/></logUserIn></env:Body>

Avec un JavaScript (qui ne prend pas du tout en compte le paramètre d'ailleurs) :

 var logUserIn = new Object();
 logUserIn.login = "my_login";
 logUserIn.password = "pass";
 this.proxy.logUserIn(logUserIn);

Comment-est ce que je fais alors ?

Merci.

# Re: Problème WSDL-Axis

Envoyé par : woogluf

Date : 10/02/2006 10:55

Peux-tu envoyer le prototype de ta méthode ainsi que le fichier de déploiement associé ?

# Re: Problème WSDL-Axis

Envoyé par : snotling

Date : 10/02/2006 17:17

Je n'ai pas le contrôle sur la partie serveur de mon service Web -- en tout cas, l'objectif est de ne rien toucher au code. Mais pour l'instant, c'est la partie cliente, Mozilla, qui me pose problème.

J'ai bien réussi à faire des requêtes SOAP de type "RPC/encoded", mais quand j'essaie de communiquer en "document/literal", impossible de le faire fonctionner correctement.

Quel type de communication SOAP as-tu utilisé ?

L'API SOAP d'eBay, par exemple, est accessible uniquement en "document/literal".

Mon fichier WSDL se trouve sur http://snotling.free.fr/Calendar.wsdl si tu veux jeter un oeil. Mozilla le charge sans erreur, mais ensuite j'ai eu beau essayer d'innombrables syntaxes JavaScript. Résultat => sans succès :/

# Re: Problème WSDL-Axis

Envoyé par : woogluf

Date : 11/02/2006 20:09

Les tests que j'ai fait avec des formats autres que RPC/encoded, ne fonctionnait pas pour moi non plus. Je ne crois pas que ce soit faisable en utilisant le proxy de mozilla (il me semble avoir vu un truc le dessus, mais je ne me rappelle plus où).

La solution est alors de la faire à la main.

De toute manière, je n'ai pas trouver de solution pour serialiser/déserialiser mes types complexes de façon automatique (i.e. que mozila me crées des objects correspondant aux types envoyés).

Par exemple :

MonType = function {
      attribut1;
      attribut2;
}

var titi=new MonType();

L'appel à la methode SOAP,

void mamethode(titi);

fait une erreur (qql chose du style : impossible de seraliser MonType), et je ne sait pas comment ajouter un nouveau serialiseur.

Si tu as des infos là dessus, je suis preneur.

# Re: Problème WSDL-Axis

Envoyé par : snotling

Date : 13/02/2006 14:10

En effet, en "rpc/encoded", ça a l'air de marcher correctement. Malheureusement, moi c'est du "document/literal" qu'il me faut :=)

J'ai lancé un fil de discussion sur le newsgroup mozilla.dev.tech.xml, on va voir si je peux récupérer quelques infos intéressantes.

Merci de ton aide en tout cas.

# Re: Problème WSDL-Axis

Envoyé par : jycronier

Date : 22/07/2006 14:48

je profite de ce post pour demander si quelqu'un a des informations des les limitations listé par woogluf. Est-ce que celles-ci sont en cours de correction ?

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.