WSDL2Java code generates invalid elements in XML instances. -----------------------------------------------------------
Key: AXIS-2561 URL: http://issues.apache.org/jira/browse/AXIS-2561 Project: Apache Axis Issue Type: Bug Components: Serialization/Deserialization, WSDL processing Affects Versions: 1.4 Reporter: Joseph J. Pantella, IV Basic Problem: WSDL that includes an element modeled like this: <xs:element name="Subject" type="SubjectType"> <xs:complexType name="SubjectType"> <xs:sequence> <xs:choice> <xs:element ref="category"/> <xs:element ref="keyword"/> </xs:choice> <xs:element ref="category" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="keyword" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> generates (partially) XML that looks like this: <ns1:keyword ns1:value="someKeyword" xmlns:ns1="http://someNS"/> <ns2:category2 ns2:code="someCode" ns2:label="someLabel" ns2:qualifier="http://someURI/2/" xmlns:ns2="http://someNS//"/> <ns3:keyword2 ns3:value="someKeyword" xmlns:ns3="http://someNS"/> The problem is that the generated XML has elements with name category2 and keyword2 which are clearly not valid according to the XML Schema. Explanation: This is because in the generated class that WSDL2Java creates (for Subject in this case) it generates different variables for the choice namely, "keyword" and "category", and other variables for the remaining elements in the sequence, in this case because they are the same it generates variables "keyword2" and "category2". WSDL2Java then creates accessor methods for each of these variables and properly sets the org.apache.axis.description.ElementDesc information. The problem arises because the BeanSerializer ultimately uses reflection to determine the element names in the XML (apparently in lieu of the information provided in the org.apache.axis.description.ElementDesc object). Because there are methods get/setCategory2 and get/setKeyword2, in addition to get/setKeyword and get/SetCategory, the BeanSerializer serializes out XML that contains illegal elements namely "<keyword2>" and "<category2>" elements. I've somewhat confirmed that the problem is a result of the BeanSerializer relying on reflection by changing the method names and witnessing that the element names change with them. E.g. if I change the get/setKeyword2 methods to get/setKeyword3 in the generated SubjectType class, I get <keyword3> elements in the XML instances. Possible Resolutions: 1) Modify the WSDL2Java code to create only one aptly named accessor for each element defined in an XML Schema so that the BeanSerializer does not find inappropriate getters/setters and generate invalid XML. 2) Modify the BeanSerializer to use the information captured in the ElementDesc object for element names, rather than relying on reflection to do the right thing. BTW I've qualified this bug as Major because it causes a massive interoperability problem which is, of course, and the whole point of web services. Thanks, -- Joe -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]