You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by "Doolittle, Todd" <TD...@searshc.com> on 2006/08/31 18:13:01 UTC

Databinding with WSDL2JAVA

I'm using Axis2 to generate a client from WSDL.  I'm having a problem
with the databinding.  The WSDL I'm using is somewhat complex, so to
illustrate the problem I created some simpler WSDL.  Consider this
fictitious service that takes as a request a last name, and then returns
as a response the husband (first name, last name) and wife (first name,
last name, maiden name) registered with that last name.

Here are how the types are defined in the WSDL:
<xsd:schema targetNamespace="http://www.example.org/family2/">
  <xsd:element name="FamilyLookupRequest">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="lastName" type="xsd:string" />
      </xsd:sequence>
   </xsd:complexType>
  </xsd:element>

  <xsd:element name="FamilyLookupResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="husband">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="firstName" type="xsd:string" />
              <xsd:element name="lastName" type="xsd:string" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>

        <xsd:element name="wife">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element name="firstName" type="xsd:string" />
             <xsd:element name="lastName"  type="xsd:string" />
             <xsd:element name="maidenName" type="xsd:string" />
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
  </xsd:element>
</xsd:schema>

In Axis2 it doesn't handle this correctly.  The FamilyLookupRequest
object is created correctly.  But because the FamilyLookupResponse has
nested complex types Axis2 does not create the FamilyLookupResponse
class correctly.  Axis2 creates the husband_type0 and wife_type1 classes
correctly.  The FamilyLookupResponse class contains a husband and wife
member, but they are defined as OMElements instead of their correct type
(husband_type1, and wife_type0).

If I change the WSDL as follows, Axis2 will then create the classes
correctly.  Any ideas?  Is this a bug? 

<xsd:schema targetNamespace="http://www.example.org/family2/">

  <xsd:complexType name="husband">
    <xsd:sequence>
      <xsd:element name="firstName" type="xsd:string" />
      <xsd:element name="lastName" type="xsd:string" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="wife">
    <xsd:sequence>
      <xsd:element name="firstName" type="xsd:string" />
      <xsd:element name="lastName" type="xsd:string" />
      <xsd:element name="maidenName" type="xsd:string" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:element name="FamilyLookupRequest">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="lastName" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="FamilyLookupResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="husband" type="fml:husband" />
        <xsd:element name="wife" type="fml:wife" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>


Lastly Axis 1.4 handles either version of the WSDL correctly.


Re: Databinding with WSDL2JAVA

Posted by Nirmit Desai <ni...@us.ibm.com>.
it sounds like a bug...

my guess is that as the outer complex tyoe is not given a name, it simply
ignores it for databinding. Try giving a name o the outer complex type?

I never tried defining types for elements inline. Having seprate type
definitions allows you to reuse the types for different elements too.

-Nirmit



                                                                           
             "Doolittle, Todd"                                             
             <TDoolitt@searshc                                             
             .com>                                                      To 
                                       <ax...@ws.apache.org>           
             08/31/2006 12:13                                           cc 
             PM                                                            
                                                                   Subject 
                                       Databinding with WSDL2JAVA          
             Please respond to                                             
             axis-user@ws.apac                                             
                  he.org                                                   
                                                                           
                                                                           
                                                                           







I'm using Axis2 to generate a client from WSDL.  I'm having a problem with
the databinding.  The WSDL I'm using is somewhat complex, so to illustrate
the problem I created some simpler WSDL.  Consider this fictitious service
that takes as a request a last name, and then returns as a response the
husband (first name, last name) and wife (first name, last name, maiden
name) registered with that last name.


Here are how the types are defined in the WSDL:


<xsd:schema targetNamespace="http://www.example.org/family2/">


  <xsd:element name="FamilyLookupRequest">


    <xsd:complexType>


      <xsd:sequence>


        <xsd:element name="lastName" type="xsd:string" />


      </xsd:sequence>


   </xsd:complexType>


  </xsd:element>


  <xsd:element name="FamilyLookupResponse">


    <xsd:complexType>


      <xsd:sequence>


        <xsd:element name="husband">


          <xsd:complexType>


            <xsd:sequence>


              <xsd:element name="firstName" type="xsd:string" />


              <xsd:element name="lastName" type="xsd:string" />


            </xsd:sequence>


          </xsd:complexType>


        </xsd:element>


        <xsd:element name="wife">


         <xsd:complexType>


           <xsd:sequence>


             <xsd:element name="firstName" type="xsd:string" />


             <xsd:element name="lastName"  type="xsd:string" />


             <xsd:element name="maidenName" type="xsd:string" />


           </xsd:sequence>


         </xsd:complexType>


       </xsd:element>


     </xsd:sequence>


   </xsd:complexType>


  </xsd:element>


</xsd:schema>


In Axis2 it doesn't handle this correctly.  The FamilyLookupRequest object
is created correctly.  But because the FamilyLookupResponse has nested
complex types Axis2 does not create the FamilyLookupResponse class
correctly.  Axis2 creates the husband_type0 and wife_type1 classes
correctly.  The FamilyLookupResponse class contains a husband and wife
member, but they are defined as OMElements instead of their correct type
(husband_type1, and wife_type0).


If I change the WSDL as follows, Axis2 will then create the classes
correctly.  Any ideas?  Is this a bug?


<xsd:schema targetNamespace="http://www.example.org/family2/">


  <xsd:complexType name="husband">


    <xsd:sequence>


      <xsd:element name="firstName" type="xsd:string" />


      <xsd:element name="lastName" type="xsd:string" />


    </xsd:sequence>


  </xsd:complexType>


  <xsd:complexType name="wife">


    <xsd:sequence>


      <xsd:element name="firstName" type="xsd:string" />


      <xsd:element name="lastName" type="xsd:string" />


      <xsd:element name="maidenName" type="xsd:string" />


    </xsd:sequence>


  </xsd:complexType>


  <xsd:element name="FamilyLookupRequest">


    <xsd:complexType>


      <xsd:sequence>


        <xsd:element name="lastName" type="xsd:string" />


      </xsd:sequence>


    </xsd:complexType>


  </xsd:element>


  <xsd:element name="FamilyLookupResponse">


    <xsd:complexType>


      <xsd:sequence>


        <xsd:element name="husband" type="fml:husband" />


        <xsd:element name="wife" type="fml:wife" />


      </xsd:sequence>


    </xsd:complexType>


  </xsd:element>


</xsd:schema>





Lastly Axis 1.4 handles either version of the WSDL correctly.





This message, including any attachments, is the property of Sears Holdings
Corporation and/or one of its subsidiaries. It is confidential and may
contain proprietary or legally privileged information. If you are not the
intended recipient, please delete it without reading the contents. Thank
you.




---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org