Hi,
Your C++ client is failing because the server response contains
href/multiref (e.g. <item href="#id0"/>)
This is nothing wrong with the server, but Axis C++ does not
support href/multiref. Please see
http://issues.apache.org/jira/browse/AXISCPP-111 for more details.
Also note that this URL has some info on how to disable href/multiref
in Axis Java. If you disable href/multiref on server side, then the
client may be able to deserialize.
Thanks,
Samisa...
On Apr 11, 2005 5:40 PM, Hernan Silberman <[EMAIL PROTECTED]> wrote:
>
> I'm still having trouble writing a client program that returns a collection of
> custum complex type instances from an Axis Java web service. Fortunately, I
> have complete control over the server and I've been experimenting with
> different
> WSDL formats. My goal is to find the WSDL document that allows me to build
> the
> C++ client side bindings using the org.apache.axis.wsdl.wsdl2ws.WSDL2Ws code
> generator.
>
> Currently, I'm able to build what looks like a sensible set of client side C++
> classes for using my simple web service and a handcoded test program:
>
> int main()
> {
> try {
> LevelsService* theService =
> new LevelsService("http://localhost:8080/nile/services/LevelsService");
> level_Array theLevelList =
> theService->getFxLevelsForShot("MAD","sq100","s1");
> cout << "LevelsService returned: " << theLevelList.m_Size << " levels." <<
> endl;
> } catch(AxisException& e) {
> // etc.
>
> This client calls a simple operation "getFxLevelsForShot" which takes three
> strings and returns an array of custom types called "level". The service is
> returning two hardcoded level instances, and the client builds two level
> instances, but the two string attributes of the returned level instances
> (name and type) are null. I've poked around in gdb and added debug stmts to
> the
> AxisCPP generated deserializer. Basically, these two getElementAsString()
> calls
> are returning NULL:
>
> int Axis_DeSerialize_level(level* param, IWrapperSoapDeSerializer* pIWSDZ)
> {
> param->name = pIWSDZ->getElementAsString("name",0);
> param->type = pIWSDZ->getElementAsString("type",0);
> return pIWSDZ->getStatus();
> }
>
> Here's the WSDL type definition:
>
> <types>
> <xsd:schema targetNamespace="http://www.dreamworks.com/LevelService.wsdl"
> xmlns:tns="http://www.dreamworks.com/LevelService.wsdl"
> xmlns="http://www.w3.org/2001/XMLSchema">
> <complexType name="level">
> <sequence>
> <element name="name" type="string"/>
> <element name="type" type="string"/>
> </sequence>
> </complexType>
>
> <complexType name="arrayOfLevel">
> <complexContent>
> <restriction base="soapenc:Array">
> <attribute ref="soapenc:arrayType" wsdl:arrayType="tns:level[]"/>
> </restriction>
> </complexContent>
> </complexType>
> </xsd:schema>
> </types>
>
> A Java client I wrote using Axis Java works fine for this WSDL. I've tried
> several different variations of the WSDL and still no dice. Please let me
> know
> if you see my error, I'm new to this and running out of ideas.
>
> Here are the pertinent details (I'm using axis-c-1.5-alpha). Any pointers you
> can provide are tremendously appreciated.
>
> thanks Much...
> Hernan
>
> -------- The SOAP 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:getFxLevelsForShot
> xmlns:ns1="http://www.dreamworks.com/LevelService.wsdl">
> <projectShortName xsi:type="xsd:string">MAD</projectShortName>
> <ShotName xsi:type="xsd:string">sq100</ShotName>
> <SequenceName xsi:type="xsd:string">s1</SequenceName>
> </ns1:getFxLevelsForShot>
> </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
>
> -------- The SOAP 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:getFxLevelsForShotResponse
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns1="http://www.dreamworks.com/LevelService.wsdl">
> <theFxLevels soapenc:arrayType="ns1:arrayOfLevel[2]"
> xsi:type="soapenc:Array"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
> <item href="#id0"/>
> <item href="#id1"/>
> </theFxLevels>
> </ns1:getFxLevelsForShotResponse>
> <multiRef id="id0" soapenc:root="0"
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xsi:type="ns2:Level" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns2="http://www.dreamworks.com/LevelService.wsdl">
> <name xsi:type="xsd:string">Dust</name>
> <type xsi:type="xsd:string">3D EFX</type>
> </multiRef>
> <multiRef id="id1" soapenc:root="0"
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xsi:type="ns3:Level" xmlns:ns3="http://www.dreamworks.com/LevelService.wsdl"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
> <name xsi:type="xsd:string">Fire</name>
> <type xsi:type="xsd:string">3D EFX</type>
> </multiRef>
> </soapenv:Body>
> </soapenv:Envelope>
>
> ------- The complete WSDL document:
> <?xml version="1.0"?>
>
> <definitions
> name="LevelsService"
> targetNamespace="http://www.dreamworks.com/LevelService.wsdl"
> xmlns:tns="http://www.dreamworks.com/LevelService.wsdl"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns="http://schemas.xmlsoap.org/wsdl/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
>
> <!-- type defs -->
> <types>
> <xsd:schema targetNamespace="http://www.dreamworks.com/LevelService.wsdl"
> xmlns:tns="http://www.dreamworks.com/LevelService.wsdl"
> xmlns="http://www.w3.org/2001/XMLSchema">
> <complexType name="level">
> <sequence>
> <element name="name" type="string"/>
> <element name="type" type="string"/>
> </sequence>
> </complexType>
>
> <complexType name="arrayOfLevel">
> <complexContent>
> <restriction base="soapenc:Array">
> <attribute ref="soapenc:arrayType" wsdl:arrayType="tns:level[]"/>
> </restriction>
> </complexContent>
> </complexType>
> </xsd:schema>
> </types>
>
> <!-- message declns -->
> <message name="getFxLevelsForShotRequest">
> <part name="projectShortName" type="xsd:string"/>
> <part name="SequenceName" type="xsd:string"/>
> <part name="ShotName" type="xsd:string"/>
> </message>
>
> <message name="getFxLevelsForShotResponse">
> <part name="theFxLevels"
> xmlns:ns1="http://www.dreamworks.com/LevelService.wsdl"
> type="ns1:arrayOfLevel"/>
> </message>
> <!-- port type declns -->
> <portType name="LevelsService">
> <operation name="getFxLevelsForShot">
> <input message="tns:getFxLevelsForShotRequest"/>
> <output message="tns:getFxLevelsForShotResponse"/>
> </operation>
> </portType>
>
> <!-- binding declns -->
> <binding name="LevelsXMLServiceSOAPBinding" type="tns:LevelsService">
> <soap:binding style="rpc"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> <operation name="getFxLevelsForShot">
> <soap:operation soapAction=""/>
> <input>
> <soap:body use="encoded"
> namespace="http://www.dreamworks.com/LevelService.wsdl"
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
> </input>
> <output>
> <soap:body use="encoded"
> namespace="http://www.dreamworks.com/LevelService.wsdl"
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
> </output>
> </operation>
> </binding>
>
> <!-- service decln -->
> <service name="LevelsXMLService">
> <port name="LevelsService" binding="tns:LevelsXMLServiceSOAPBinding">
> <soap:address
> location="http://localhost:8080/nile/services/LevelsService"/>
> </port>
> </service>
>
> </definitions>
>
>