WSDL complex type elements do not comply to JAXB Java bean
----------------------------------------------------------

                 Key: AXIS2-3724
                 URL: https://issues.apache.org/jira/browse/AXIS2-3724
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: wsdl
    Affects Versions: nightly
         Environment: Win XP Pro, JDK6_04, Tomcat 5.5.26, JAXB 2.1.6
            Reporter: Glen Verran
             Fix For: nightly


I created a web service which contains one method.  It has one parameter of 
type RetrieveConfigurationDataRequest and returns 
RetrieveConfigurationDataResponse.

Focusing on RetrieveConfigurationDataRequest , the java bean was generated by 
JAXB 2.1.6.  Here are the variables from the java bean below

    @XmlElement(required = true)
    protected String echoData;
    @XmlElement(required = true)
    protected String identifierType;
    @XmlElement(required = true)
    protected String identifier;
    @XmlElement(required = true)
    protected String revision;
    protected String vintage;
    protected Long dataBlockSize;
    protected Long dataBlockPosition;
    @XmlElement(required = true)
    protected DataEncodingType dataEncodingType;

The order of their "getters" and "setters" appear in the same order as the 
variables.

The WSDL that gets generated contains this complexType which lools like this.

<xs:complexType name="RetrieveConfigurationDataRequest">
  <xs:complexContent>
    <xs:extension base="ns0:JaxbInternalMsg">
      <xs:sequence>
        <xs:element minOccurs="0" name="dataBlockPosition" nillable="true" 
type="xs:long"/>
        <xs:element minOccurs="0" name="dataBlockSize" nillable="true" 
type="xs:long"/>
        <xs:element minOccurs="0" name="dataEncodingType" nillable="true" 
type="ax21:DataEncodingType"/>
        <xs:element minOccurs="0" name="echoData" nillable="true" 
type="xs:string"/>
        <xs:element minOccurs="0" name="identifier" nillable="true" 
type="xs:string"/>
        <xs:element minOccurs="0" name="identifierType" nillable="true" 
type="xs:string"/>
        <xs:element minOccurs="0" name="revision" nillable="true" 
type="xs:string"/>
        <xs:element minOccurs="0" name="vintage" nillable="true" 
type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

I find that the WSDL does not comply with the JAXB 2.1.6 generated java bean in 
the following ways:

1)  The elements are alphabetically sorted and do not appear in the same order 
as in the java bean. 
2)  Look at the "identifier" element  and you'll see that it has a minOccurs of 
0.  This is a required field by the java bean and so should not have a 
minOccurs modifier in there.
3)  I also noticed that all the fields are set to nullable.  I don't know what 
the criteria is for this, but I assume it is because these are referring to 
java objects and not primitives.  I also think that if an object is required, 
that it should not be nullable.

At the end of the day, the WSDL must take JAXB and its annotations into account 
and reflect the web service and its java beans 100% and it is not doing that.

I know there is a workaround by inserting a modified wsdl into the aar file, 
but I don't want to have to do that since AXIS2 was designed to generate the 
WSDL itself when issuing ?WSDL in a browser.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to