Web Service Development Guide : PART VI Appendices : Appendix A Code Generation Details : SOAP Encoding
SOAP Encoding
HydraExpress handles the following features in SOAP encoding:
SOAP-Encoded arrays
SOAP-Encoded built-in types
SOAP references
SOAP-Encoded Arrays
HydraExpress represents SOAP-Encoded arrays as classes derived from a rwsf::ArrayHandle instantiated on the type of element contained in the array. Array body rwsf::ArrayBody contains an instance of rwsf::SoapArray to which it passes all its methods.
Array support includes support for arrays of arrays, dimensioned arrays (including multidimensional), recursive arrays, and arrays of types defined in the WSDL document. HydraExpress does not currently support sparse arrays. For more information on recursive arrays, see “Recursive Arrays”
The generated class provides methods for working with the vector as an XML document. The generated class inherits methods for working with the collection.
For the array shown in the WSDL fragment below:
...
<complexType name="ArrayOfdouble">
<complexContent>
<restriction base="SOAP-ENC:Array">
<attribute ref="SOAP-ENC:arrayType"
wsdl:arrayType="xsd:double[]"/>
</restriction>
</complexContent>
</complexType>
...
HydraExpress generates a class named ArrayOfdouble that derives from rwsf::ArrayHandle<double>. Class ArrayOfdouble provides marshal methods for writing the array as XML and unmarshal methods for populating the array from XML. In addition, it reflects a typical container interface, providing iterators and other methods to access the array members.
SOAP-Encoded Built-in Types and References
HydraExpress maps SOAP-encoded built-in types to their equivalent xsd types. That is, SOAP-ENC:int maps to xsd:int and so on. HydraExpress clients and servers then produce messages using the xsd type, such as xsd:int.
Recursive Arrays
HydraExpress supports recursive SOAP-encoded arrays, meaning that it can parse nested arrays containing elements of the same user-defined type as the parent element.
The following schema snippet illustrates how this might look. The user-defined type Struct contains an element of type ArrayofStruct:
 
<complexType name="Struct">
<xsd:all>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="array" type="xsd1:ArrayOfStruct"/>
</xsd:all>
</xsd:complexType>
The complexType ArrayofStruct contains a type Struct:
 
<complexType name="ArrayOfStruct">
<complexContent>
<restriction base="SOAP-ENC:Array">
<attribute ref="SOAP-ENC:arrayType"
wsdl:arrayType="xsd1:Struct[]"/>
</restriction>
</complexContent>
</complexType>
In this scenario, a user-defined array Struct contains type ArrayofStruct, which itself contains a type Struct.