Oops, I forget to say. Even the valid response is observed through
the SOAPMonitor, the c++ client code is always reporting:
"result.size = 0"
What could be preventing it extract the strings from the message?

Thanks,
Tao

Tao Yang wrote:

Hi,

Again with my Axis C++ 1.5 client running against the Axis JAVA 1.3 server experiment:
I have a webservice has interface : String[] search(String getIgnored)
the java client handle it perfectly by the way.

My c++ client is a bit funky though. The stub generated has following code (I add some
debuging output):
xsd__string_Array Search::search(xsd__string Value0)
{
   xsd__string_Array RetArray = {NULL, 0};
   const char* pcCmplxFaultName;
   try
   {
       if (AXIS_SUCCESS != m_pCall->initialize(CPP_RPC_PROVIDER))
           return RetArray;
   if (NULL==m_pCall->getTransportProperty("SOAPAction",false))
   {
       m_pCall->setTransportProperty(SOAPACTION_HEADER , "");
   }
       m_pCall->setSOAPVersion(SOAP_VER_1_1);
       m_pCall->setOperation("search", "http://ws.search.simdesk.com";);
       applyUserPreferences();
       m_pCall->addParameter((void*)Value0, "criteria", XSD_STRING);
       if (AXIS_SUCCESS == m_pCall->invoke())
       {
if(AXIS_SUCCESS == m_pCall->checkMessage("searchResponse", "http://ws.search.simdesk.com";))
           {
// tyang changed following line - it complains about type conversion is invalid //RetArray = (xsd__string_Array&)m_pCall->getBasicArray(XSD_STRING, "searchReturn", 0); Axis_Array arr = m_pCall->getBasicArray(XSD_STRING, "searchReturn", 0); xsd__string_Array sarr = { (xsd__string *) arr.m_Array, arr.m_Size };
               RetArray.m_Array = (xsd__string *) arr.m_Array;
               RetArray.m_Size = arr.m_Size;
               std::cout << "result.size = " << RetArray.m_Size << endl;
               std::cout << "result: ";
               for (int i = 0; i < RetArray.m_Size; i++)
               {
std::cout << RetArray.m_Array[i] << "; "; std::cout << endl;
           }
       }
   m_pCall->unInitialize();
       return RetArray;
   }
   catch(AxisException& e)
   {
       int iExceptionCode = e.getExceptionCode();
       if(AXISC_NODE_VALUE_MISMATCH_EXCEPTION != iExceptionCode)
       {
           throw SoapFaultException(e);
       }
       ISoapFault* pSoapFault = (ISoapFault*)
m_pCall->checkFault("Fault","http://172.16.53.33:8080/simdesk/services/Search"; );
       if(pSoapFault)
       {
           m_pCall->unInitialize();
           throw SoapFaultException(e);
       }
       else throw;
   }
}

Plus, the SOAPMonitor reporting following request:
<?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:search xmlns:ns1="http://ws.search.simdesk.com";>
     <criteria xsi:type="xsd:string">asdr</criteria>
   </ns1:search>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

And following response:<?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>
<ns1:searchResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns1="http://ws.search.simdesk.com";> <searchReturn soapenc:arrayType="soapenc:string[6]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
       <searchReturn xsi:type="soapenc:string">eqre.pdf</searchReturn>
       <searchReturn xsi:type="soapenc:string">another.txt</searchReturn>
       <searchReturn xsi:type="soapenc:string"></searchReturn>
       <searchReturn xsi:type="soapenc:string">~/blah.h</searchReturn>
       <searchReturn xsi:type="soapenc:string">asdf</searchReturn>
       <searchReturn xsi:type="soapenc:string" xsi:nil="true"/>
     </searchReturn>
   </ns1:searchResponse>
 </soapenv:Body>
</soapenv:Envelope>

What have I done wrong? :-(

Thanks for any help or advice in advance!
Tao



Reply via email to