2010-11-28 29 views
0

J'utilise axis2 pour mes services Web. Aujourd'hui, quand j'ai essayé d'utiliser mon propre fichier wsdl au lieu de l'axe2 par défaut généré un comportement inattendu observateur.Viens les détails.Utilisation du fichier wsdl personnalisé dans axis2 - Problème lors de l'utilisation de <xs:all> au lieu de <xs:sequence>

Ceci est la pièce originale du fichier wsdl.

 <xs:element name="multiply"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element minOccurs="0" name="a" nillable="true" type="xs:string"/> 
        <xs:element minOccurs="0" name="b" nillable="true" type="xs:string"/> 
        <xs:element minOccurs="0" name="c" nillable="true" type="xs:string"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 

    I changed <xs:sequence> to <xs:all> so that i can send elements in any order in soap request.Below is the changed one. 
     <xs:element name="multiply"> 
      <xs:complexType> 
       <xs:all> 
        <xs:element minOccurs="0" name="a" nillable="true" type="xs:string"/> 
        <xs:element minOccurs="0" name="b" nillable="true" type="xs:string"/> 
        <xs:element minOccurs="0" name="c" nillable="true" type="xs:string"/> 
       </xs:all> 
      </xs:complexType> 
     </xs:element> 

Quand j'exécute ce que je reçois pour une valeur est Blanck et nulle b et c.

Ceci est la demande de savon que j'envoie <axis:multiply> <axis:a>a</axis:a> <axis:b>b</axis:b> <axis:c>c</axis:c> </axis:multiply> au serveur.

Voici l'extrait de code que je utilise à côté serveur

   public String multiply(String a, String b, String c) throws Exception 
     { 
    LogHelper.info(logger, "Begin - Multiply"); 
    if (a.trim().equals("")) 
     LogHelper.info(logger, "value fo a is a=\"\""); 
    if (b == null) 
     LogHelper.info(logger, "value fo b is null"); 
    if (c == null) 
     LogHelper.info(logger, "value fo c is null"); 

    return "Hellow World"; 
     } 

sur la console pour les bûcherons Iam obtenir ci-dessous à mettre:

  19:47:20,227 INFO [STDOUT] INFO [SampleWebService] Begin - Multiply 
      19:47:20,227 INFO [STDOUT] INFO [SampleWebService] value fo a is a="" 
      19:47:20,227 INFO [STDOUT] INFO [SampleWebService] value fo b is null 
      19:47:20,228 INFO [STDOUT] INFO [SampleWebService] value fo c is null 

Peut-on dire pourquoi je suis valeurs receivng comme noir ou nul même si je fournis des valeurs.

Merci,
Narendra

Répondre

0

Ce bogue dans la BAD. S'il vous plaît se référer à https://issues.apache.org/jira/browse/AXIS2-842

Il a été corrigé, donc je suppose que vous utilisez une version plus ancienne.

J'ai testé ce problème avec l'axe 1.5.1/jdk1.6.0/openSuse 11.2. Cela semble fonctionner à la fois avec l'invocation REST et avec le talon du client. Voici mon type complexe:

<xsd:element name="concat"> 
    <xsd:complexType> 
    <xsd:all> 
     <xsd:element name="s1" type="xsd:string"/> 
     <xsd:element name="s2" type="xsd:string"/> 
    </xsd:all> 
</xsd:complexType> 
</xsd:element> 

L'opération est supposée concaténer à des chaînes. L'URL REST ressemble:

http://.../axis2/services/TestService/concat?s2=test2&s1=test1 

La réponse semble aussi OK:

<ns1:concatResponse xmlns:ns1="..."><r>test1test2</r></ns1:concatResponse> 

La mise en œuvre de service est trivial. Alors ... il est que je suis fixé pour moi :-(

Cheers!

+0

Salut. Merci pour votre réponse. En utilisant axis2 1.5.2. Pouvez-vous me dire dans quelle version il est fixé (Est-il fixe dans axis2 1.5.3) – Narendra

+0

Je ne sais pas pourquoi cela ne fonctionne pas pour vous :(Je l'ai testé avec axis2 1.5.1 S'il vous plaît voir ma réponse mise à jour. –