Hi There, I'm having a problem, that I need your help on. Using Axis2 1.3 I have generated java classes from a WSDL file. The data binding framework used is XMLBeans (the structure of the wsdl and xsd files is very complex, so we decided on XMLBeans instead of ADB, hoping that would result in more correct generated code).
The Web Service server is the Exchange Web Service interface that is a part of Microsoft Exchange 2007, so we have no way of changing the server side. We have downloaded the WSDL from the Exchange server (and added a service tag, as this was not included). The WSDL refers to two xsd files, one that defines Message stuff (error codes as ENUM and different basic stuff) and one that defines the different types and elements. Here is a small abstract of the XML Schema is appended: === START OF SCHEMA === <xs:schema id="types" elementFormDefault="qualified" version="Exchange2007_SP1" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" targetNamespace="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:tns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Path" abstract="true" type="t:BasePathToElementType"/> <xs:element name="FieldURI" type="t:PathToUnindexedFieldType" substitutionGroup="t:Path"/> <xs:element name="IndexedFieldURI" type="t:PathToIndexedFieldType" substitutionGroup="t:Path" /> <xs:element name="ExtendedFieldURI" type="t:PathToExtendedFieldType" substitutionGroup="t:Path"/> <xs:complexType name="TwoOperandExpressionType" abstract="true"> <xs:complexContent> <xs:extension base="t:SearchExpressionType"> <xs:sequence> <xs:element ref="t:Path"/> <xs:element name="FieldURIOrConstant" type="t:FieldURIOrConstantType"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="FieldURIOrConstantType"> <xs:choice> <xs:element ref="t:Path"/> <xs:element name="Constant" type="t:ConstantValueType" /> </xs:choice> </xs:complexType> <xs:complexType name="ConstantValueType"> <xs:attribute name="Value" type="xs:string" use="required" /> </xs:complexType> <xs:complexType name="IsEqualToType"> <xs:complexContent> <xs:extension base="t:TwoOperandExpressionType"/> </xs:complexContent> </xs:complexType> <xs:element name="IsEqualTo" type="t:IsEqualToType" substitutionGroup ="t:SearchExpression"/> === END OF SCHEMA === As I understand this schema. When I create a IsEqualTo element, I should be able to add either FieldURI, IndexedFieldURI, or ExtendedFieldURI element. However the generated code has a method called setPath(BasePathToElementType), and regardless what I do the request being sent to the server contains a Path element instead of one of the possible substitutes. The following classes are created: PathDocument FieldURIDocument IndexedFieldURIDocument ExtendedFieldURIDocument I would expect the PathDocument to be an abstract class which each of the three substitution types extends; but the PathDocument class is in fact not abstract, and objects can be created. If I call the method xmlText() on each of the three classes: FieldURIDocument, IndexedFieldURIDocument, and ExtendedFieldURIDocument, correct XML is returned (e.g. <FieldURI FieldURI="item:ItemClass" xmlns="http://schemas.microsoft.com/exchange/services/2006/types"/>). The ultimate goal is to produce this XML: <typ:IsEqualTo xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types"> <FieldURI FieldURI="item:ItemClass" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" /> <typ:FieldURIOrConstant> <typ:Constant Value="IPM.Note" /> </typ:FieldURIOrConstant> </typ:IsEqualTo> But what the axis generated classes produce is this (see the path element): <typ:IsEqualTo xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types"> <typ:Path FieldURI="item:ItemClass" xsi:type="typ:PathToUnindexedFieldType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> <typ:FieldURIOrConstant> <typ:Constant Value="IPM.Note" /> </typ:FieldURIOrConstant> </typ:IsEqualTo> Anyone out there who can point/push me in the right direction? Any help is greatly appreciated. Or is this simply related to a bug in the code generation? For now, we have extended the generated code with methods for adding each of the three type, but in the long run, that's not a suitable solution. Regards Mads