Hi all,
I don't know if it's a bug, but it seems that nested complex elements in
SOAP request are not deserialized by Axis2 ADB. Here is the schema which
defines a TradeFilterDTO contains other two filters:
<xs:complexType name="TradeFilterDTO">
<xs:complexContent>
<xs:extension base="ax21:SoapDTO">
<xs:sequence>
<xs:element minOccurs="0"
name="auxiliariesAsSwaps" nillable="true" type="xs:boolean"/>
<xs:element minOccurs="0" name="batchID"
nillable="true" type="xs:long"/>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="businessUnits" nillable="true" type="xs:int"/>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="dealIDs" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="fXFilter"
nillable="true" type="ax21:FXTradeFilterDTO"/>
<xs:element minOccurs="0"
name="fromModifyTime" nillable="true" type="xs:dateTime"/>
<xs:element minOccurs="0"
name="fromTradeTime" nillable="true" type="xs:dateTime"/>
<xs:element minOccurs="0"
name="includeModifications" nillable="true" type="xs:boolean"/>
<xs:element minOccurs="0" name="mMFilter"
nillable="true" type="ax21:MMTradeFilterDTO"/>
<xs:element minOccurs="0" name="maxTrades"
nillable="true" type="xs:int"/>
<xs:element minOccurs="0"
name="onlyBatchTrades" nillable="true" type="xs:boolean"/>
<xs:element minOccurs="0"
name="toModifyTime" nillable="true" type="xs:dateTime"/>
<xs:element minOccurs="0" name="toTradeTime"
nillable="true" type="xs:dateTime"/>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="tradeChannels" nillable="true" type="xs:string"/>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="tradeProducts" nillable="true" type="xs:string"/>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="tradeStatus" nillable="true" type="xs:string"/>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="userIDs" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="FXTradeFilterDTO">
<xs:complexContent>
<xs:extension base="ax21:SoapDTO">
<xs:sequence>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="currencies" nillable="true" type="xs:string"/>
<xs:element minOccurs="0"
name="fromMaturityDate" nillable="true" type="xs:date"/>
<xs:element minOccurs="0"
name="fromValueDate" nillable="true" type="xs:date"/>
<xs:element minOccurs="0"
name="toMaturityDate" nillable="true" type="xs:date"/>
<xs:element minOccurs="0" name="toValueDate"
nillable="true" type="xs:date"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MMTradeFilterDTO">
<xs:complexContent>
<xs:extension base="ax21:SoapDTO">
<xs:sequence>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="currencies" nillable="true" type="xs:string"/>
<xs:element minOccurs="0"
name="fromMaturityDate" nillable="true" type="xs:date"/>
<xs:element minOccurs="0"
name="fromValueDate" nillable="true" type="xs:date"/>
<xs:element minOccurs="0"
name="toMaturityDate" nillable="true" type="xs:date"/>
<xs:element minOccurs="0" name="toValueDate"
nillable="true" type="xs:date"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
The request looks as follows:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:ser="http://service.webservice.emarkets.nordea.com"
xmlns:xsd="http://dto.webservice.emarkets.nordea.com/xsd">
<soap:Header/>
<soap:Body>
<ser:getTrades>
<ser:filter>
<xsd:fXFilter>
<xsd:currencies>EUR</xsd:currencies>
</xsd:fXFilter>
<xsd:mMFilter>
<xsd:currencies>USD</xsd:currencies>
</xsd:mMFilter>
<xsd:maxTrades>2</xsd:maxTrades>
</ser:filter>
</ser:getTrades>
</soap:Body>
</soap:Envelope>
ADB serialized the above request to the corresponding TradeFilterDTO
object with nested attributes fxFilter and mMfilter null (maxTrades is
set on TradeFilterDTO).
Please let me know if I did something wrong, thanks a lot!
Regards,
Mai Sun