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::vector<std::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::vector<std::string>::iterator p = aVector.begin(); p!=aVector.end(); p++)
{
std::string theStr = *p;

theArr[i] = const_cast<char*>(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:ProdCode>MAD</ns1:ProdCode>
<ns1:LevelNamePattern>some level name pattern</ns1:LevelNamePattern>
<ns1:LevelType>FX</ns1:LevelType>
<ns1:LevelIsIP>true</ns1:LevelIsIP>
<ns1:Note>Some note</ns1:Note>
<ns1:NotePattern>some note pattern</ns1:NotePattern>
<ns1:Artist>p���</ns1:Artist>
<ns1:TaskName>p���</ns1:TaskName>
<ns1:CompletedDate>p���</ns1:CompletedDate>
<ns1:Attempt>p���</ns1:Attempt>
<ns1:LevelReuse>p���</ns1:LevelReuse>
<ns1:SequenceName>p���</ns1:SequenceName>
<ns1:SequenceNamePattern>some seqname pattern</ns1:SequenceNamePattern>
<ns1:SequenceStatus>p���</ns1:SequenceStatus>
<ns1:ShotName>p���</ns1:ShotName>
<ns1:ShotNamePattern>some shotname pattern</ns1:ShotNamePattern>
<ns1:ShotStatus>p���</ns1:ShotStatus>
<ns1:ShotIsOnHold>false</ns1:ShotIsOnHold>
<ns1:ShotPriority>p���</ns1:ShotPriority>
<ns1:ShotPriorityPattern>some shotprior pattern</ns1:ShotPriorityPattern>
<ns1:UserLogin>krogers</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:Body><soapenv:Fault><faultcode>soapenv:Server.userException</faultcode><faultstring>java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence.</faultstring><detail><ns1: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]

Reply via email to