Adrian Dick wrote:
Hi,
I think you have mis-understood the API for Arrays here.
Because we need to handle nil (or NULL) elements within arrays, we can't
simply use a NULL terminated array. Therefore we have a small class to
hold the array, of the following structure (using xsd__string example):
class xsd__string_Array
{
public:
xsd__string * m_Array;
int m_Size; // Size of array (inc. NULL or empty elements)
};
Which you would use something like:
xsd__string_Array arrayInput;
arrayInput.m_Array = new xsd__string[2];
arrayInput.m_Size = 2;
webServiceStub-methodWithArrayInput(arrayInput);
Thank you for your help, greatly appreciated. =)
I am having some issues with the serialization of these arrays ,
however. I'm handling the xsd__string_Array objects just as described:
---
// already defined:
std::vectorstd::string aVector;
xsd__string_Array aXsdArray;
//then do something like:
aXsdArray.m_Size = aVector.size();
char* theArr[aXsdArray.m_Size + 1]; // + 1 for the NULL terminator (is
this needed?)
int i = 0;
for (std::vectorstd::string::iterator p = aVector.begin();
p!=aVector.end(); p++)
{
std::string theStr = *p;
theArr[i] = const_castchar*(theStr.c_str());
i++;
}
theArr[i] = NULL;
aXsdArray.m_Array = theArr;
---
I've stepped through this with gdb and it seems to be doing just what I
would like (aside from the NULL termination, which I don't know whether
or not is needed).
From my previous email, these xsd__string_Array objects are elements of
a complex type:
xsd:element name=getLevels
xsd:complexType
xsd:sequence
...some other elements...
xsd:element name=Artist type=xsd:string minOccurs=0
maxOccurs=unbounded/
When I call the service, the output from TCPMon is below. All of the
xsd__string_Array elements seem to have one incorrect entry (I was
anticipating multiple entries for each array element containing the
distinct values - is that correct?).
thanks,
~kevin
--
SOAP request:
--
POST /nile/services/LevelsService HTTP/1.1
Host: denial:2000
Content-Type: text/xml; charset=UTF-8
SOAPAction:
Content-Length: 1296
?xml version='1.0' encoding='utf-8' ?
SOAP-ENV:Envelope
xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/;
xmlns:xsd=http://www.w3.org/2001/XMLSchema;
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;
SOAP-ENV:Body
ns1:getLevels xmlns:ns1=http://www.dreamworks.com/nile/schema/;
ns1:ProdCodeMAD/ns1:ProdCode
ns1:LevelNamePatternsome level name pattern/ns1:LevelNamePattern
ns1:LevelTypeFX/ns1:LevelType
ns1:LevelIsIPtrue/ns1:LevelIsIP
ns1:NoteSome note/ns1:Note
ns1:NotePatternsome note pattern/ns1:NotePattern
ns1:Artistp���/ns1:Artist
ns1:TaskNamep���/ns1:TaskName
ns1:CompletedDatep���/ns1:CompletedDate
ns1:Attemptp���/ns1:Attempt
ns1:LevelReusep���/ns1:LevelReuse
ns1:SequenceNamep���/ns1:SequenceName
ns1:SequenceNamePatternsome seqname pattern/ns1:SequenceNamePattern
ns1:SequenceStatusp���/ns1:SequenceStatus
ns1:ShotNamep���/ns1:ShotName
ns1:ShotNamePatternsome shotname pattern/ns1:ShotNamePattern
ns1:ShotStatusp���/ns1:ShotStatus
ns1:ShotIsOnHoldfalse/ns1:ShotIsOnHold
ns1:ShotPriorityp���/ns1:ShotPriority
ns1:ShotPriorityPatternsome shotprior pattern/ns1:ShotPriorityPattern
ns1:UserLoginkrogers/ns1:UserLogin
/ns1:getLevels
/SOAP-ENV:Body
/SOAP-ENV:Envelope
--
SOAP response:
--
HTTP/1.1 500 Internal Server Error
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Wed, 19 Oct 2005 20:57:42 GMT
Server: Apache-Coyote/1.1
Connection: close
21e
?xml version=1.0 encoding=UTF-8?soapenv:Envelope
xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/;
xmlns:xsd=http://www.w3.org/2001/XMLSchema;
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;soapenv:Bodysoapenv:Faultfaultcodesoapenv:Server.userException/faultcodefaultstringjava.io.UTFDataFormatException:
Invalid byte 1 of 1-byte UTF-8
sequence./faultstringdetailns1:hostname
xmlns:ns1=http://xml.apache.org/axis/;denial.pdi.com/ns1:hostname/detail/soapenv:Fault/soapenv:Body/soapenv:Envelope
0
--
Kevin Rogers
PDI / Dreamworks
ext.29163 | 650.562.9163
[EMAIL PROTECTED]