Hello,
I'm having some difficulties dealing with the Axis defined xsd__ types
used for De/Serialization from SOAP. Basically, I had a service
constructed which only used strings (well, actually char* as that's what
Axis uses) for the parameters to the service calls, and everything
worked great. I built an API around the Axis-generated that accepted
char* as parameters and then passed those to the corresponding Axis call
that accepted xsd__string's as it's parameters.
I know that xsd__string is typedef'd to 'char', so this was not a
problem and worked great.
Originally, when I was only passing single strings my WSDL definition
looked like this:
<xsd:element name="getLevels">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProdCode" type="xsd:string"/>
<xsd:element name="Type" type="xsd:string"/>
...
...the function generated from this WSDL has for it's parameters
xsd__string, which I was successfully calling by doing something like this:
public myWrapper(char* aProdCode, char* aType)
{
<.... code to get the ServicePortType...>
theService->getLevels(aProdCode, aType);
}
However, I now want to change the API to accept arrays of strings
(char*) and boolean values. Here is what my WSDL now looks like:
<xsd:element name="getLevels">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProdCode" type="xsd:string" minOccurs="1"
maxOccurs="1"/>
<xsd:element name="LevelNamePattern" type="xsd:string"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="LevelType" type="xsd:string"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="LevelIsIP" type="xsd:boolean"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="Artist" type="xsd:string" minOccurs="0"
maxOccurs="unbounded"/>
....
...the function generated from this WSDL now has for it's parameters
xsd__string, xsd__boolean and xsd__string_Array values.
I know that xsd__string_Array is typedef'd to an array of xsd__string,
which would mean an array of 'char', correct? I also see from the code
that xsd__boolean is typedef'd to an enum containing true and false
values. My wrapper API call now looks like this, accepting boolean and
char*[] values:
public myWrapper(char* aProdCode, char* aLevelNamePattern", char*
aLevelType, bool aLevelIsIP, char* aArtist[])
{
<.... code to get the ServicePortType...>
theService->getLevels(aProdCode, aLevelName Pattern, aLevelType,
aLevelIsIP, aArtist);
}
However, the compiler complains with the above code (I've eliminated
quite a few parameters in the above code for clarity):
LevelServiceAPI.cpp: In function `tLevel_Array
getLevels(char*, char*, char*, bool, char*, char*, char**, char**,
char**,
char**, char**, char**, char*, char**, char**, char*, char**, bool,
char**,
char*, char*)':
LevelServiceAPI.cpp:106: no matching function for call to
`LevelsServicePortType::getLevels(char*&, char*&, char*&, bool, char*&,
char*&, char**&, char**&, char**&, char**&, char**&, char**&, char*&,
char**&, char**&, char*&, char**&, bool, char**&, char*&, char*&)'
LevelsServicePortType.hpp:28: candidates are: tLevel_Array
LevelsServicePortType::getLevels(char*, char*, char*,
axiscpp::xsd__boolean,
char*, char*, axiscpp::xsd__string_Array, axiscpp::xsd__string_Array,
axiscpp::xsd__string_Array, axiscpp::xsd__string_Array,
axiscpp::xsd__string_Array, axiscpp::xsd__string_Array, char*,
axiscpp::xsd__string_Array, axiscpp::xsd__string_Array, char*,
axiscpp::xsd__string_Array, axiscpp::xsd__boolean,
axiscpp::xsd__string_Array, char*, char*)
All of the parameters defined in the ServicePortType function with type
of xsd__String_Array or xsd_boolean are mapped to char** and boolean
values accordingly. One strange thing that I did notice was that the
compiler changed the references of xsd__string to char* when outputting
the above message, but did not do so for xsd__string_Array or
xsd__boolean. (What I mean by that is that the definition of the
function in the ServicePortType class has xsd__string, xsd__string_Array
and xsd__boolean as it's parameters, but the compiler seems to only
decode the references to xsd__string to it's corresponding char* value).
Can anyone shed some light on this?
thanks!
~kevin
--
Kevin Rogers
PDI / Dreamworks
ext.29163 | 650.562.9163
[EMAIL PROTECTED]