axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adrian Dick <adrian.d...@uk.ibm.com>
Subject Re: deserialization help...
Date Wed, 13 Apr 2005 09:29:29 GMT
Hi,

As you comment below, it is suspicious that the generated code is looking
for the "result" element, as defined in the WSDL, but the SOAP response
doesn't contain such an element.  It is probably worth checking your server
has been correctly deployed from the same version of the WSDL.

Also, I notice from your WSDL that you're actually trying to use an
rpc/literal web service.    Was that your intention?
(snippet from WSDL binding)
>    <soapbind:binding
>     transport="http://schemas.xmlsoap.org/soap/http/"
>     style="rpc"/>

If, as you have said in the past, you have control over the server, I'd
recommend you try with doc/literal.

Regards,
Adrian
_______________________________________
Adrian Dick (adrian.dick@uk.ibm.com)
WebSphere MQ and ESB Development
Tel: +44-(0)-1962-819212
Notes: Adrian Dick/UK/IBM@IBMGB

Hernan Silberman <hsilberm@pdi.com> wrote on 13/04/2005 02:19:27:

>
> More information:  It looks like my WSDL-generated Axis cpp client does
the
> following:
>
> I call LevelsServicePortType::getFxLevelsForShot()
> which calls SoapDeserializer.getCmplxObj()
> which calls Axis_DeSerialize_tLevelCollection
> which does a SoapDeserializer.getCmplxArry()
> which calls Axis_Create_tLevelCollection() with a size of 0
>
> hope this helps.
> thanks again...
> Hernan
>
>
> On Tue, 12 Apr 2005, Hernan Silberman wrote:
>
> >
> > > Given you have complete control of the server I would suggest you
> > > re-deploy your web service as doc/literal.
> > > doc/literal is supported in AxisCPP far better due to our commitment
to
> > > being ws-i compliant.
> >
> > Thanks for the tip, I've discovered ws-i.org and I'm doing my bestto
follow
> > their guidelines as well.
> >
> > I'm doing doc/literal for my service now and I've turned off
> multipart encoding
> > on my Axis Java service.  I know I'm getting close, but something
> is still wrong
> > with my WSDL.  My test client is getting a NULL response from the
generated
> > stub:
> >
> > int main()
> > {
> >     try {
> >       LevelsServicePortType* theService =
> >    new LevelsServicePortType("http://localhost:
> 8080/nile/services/LevelsServicePort");
> >       tLevelCollection* thePtr = theService->getFxLevelsForShot();
> >       if( NULL==thePtr )
> >       {
> >      cout << "thePtr is null" << endl;
> >       }
> >     } catch(AxisException& e) {
> > // etc.
> >
> > Here's the new 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>
> >      <getFxLevelsForShotResponse xmlns="http://www.dreamworks.
> com/LevelService/">
> >         <ns1:LevelCollectionResponse xmlns:ns1="http://www.
> dreamworks.com/nile/schema/">
> >            <ns1:Element>
> >               <ns1:Prod>MAD</ns1:Prod>
> >               <ns1:Name>Dust</ns1:Name>
> >            </ns1:Element>
> >            <ns1:Element>
> >               <ns1:Prod>MAD</ns1:Prod>
> >               <ns1:Name>Fire</ns1:Name>
> >            </ns1:Element>
> >         </ns1:LevelCollectionResponse>
> >      </getFxLevelsForShotResponse>
> >   </soapenv:Body>
> > </soapenv:Envelope>
> >
> > This generated call to getCmplxObject below returns null.  I don't see
the
> > string literal "result" in the SOAP response above, though it isin
> the WSDL.
> > Seems suspicious.
> >
> > if(AXIS_SUCCESS == m_pCall->checkMessage("getFxLevelsForShotResponse",
"
> http://www.dreamworks.com/LevelService/"))
> > {
> >   pReturn =
> >   (tLevelCollection*)m_pCall->getCmplxObject((void*)
> >   Axis_DeSerialize_tLevelCollection,
> >   (void*) Axis_Create_tLevelCollection,
> >   (void*) Axis_Delete_tLevelCollection,
> >   "result", 0);
> > }
> >
> > I appreciate any help in finding my error.
> > thanks again,
> > Hernan
> >
> > Here's the WSDL the cpp stub is generated from:
> >
> > <?xml version="1.0"?>
> >
> > <definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
> >  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> >  xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"
> >  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
> >  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> >  xmlns:tns="http://www.dreamworks.com/LevelService/"
> >  targetNamespace="http://www.dreamworks.com/LevelService/"
> >  xmlns:typens="http://www.dreamworks.com/nile/schema/">
> >
> >  <types>
> >    <xsd:schema targetNamespace="http://www.dreamworks.com/nile/schema/"
> >        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> >        elementFormDefault="qualified"
> >        attributeFormDefault="unqualified">
> >
> >       <xsd:element name="LevelCollectionResponse" type="typens:
> tLevelCollection"/>
> >       <xsd:complexType name="tLevelCollection">
> >          <xsd:sequence>
> >             <xsd:element name="Element" type="typens:tLevel"
> minOccurs="0" maxOccurs="unbounded"/>
> >          </xsd:sequence>
> >       </xsd:complexType>
> >
> >       <xsd:complexType name="tLevel">
> >         <xsd:sequence>
> >            <xsd:element name="Prod" type="xsd:string"/>
> >            <xsd:element name="Name" type="xsd:string"/>
> >         </xsd:sequence>
> >       </xsd:complexType>
> >
> >    </xsd:schema>
> >  </types>
> >
> >  <!-- message declns -->
> >  <message name="getFxLevelsForShotRequest"/>
> >  <message name="getFxLevelsForShotResponse">
> >    <part name="result" element="typens:LevelCollectionResponse"/>
> >  </message>
> >
> >  <!-- port type declns -->
> >  <portType name="LevelsServicePortType">
> >    <operation name="getFxLevelsForShot">
> >      <input message="tns:getFxLevelsForShotRequest"/>
> >      <output message="tns:getFxLevelsForShotResponse"/>
> >    </operation>
> >  </portType>
> >
> >  <!-- binding declns -->
> >  <binding name="LevelsXMLServiceSOAPBinding" type="tns:
> LevelsServicePortType">
> >    <soapbind:binding
> >     transport="http://schemas.xmlsoap.org/soap/http/"
> >     style="rpc"/>
> >    <operation name="getFxLevelsForShot">
> >      <input name="getFxLevelsForShotRequest">
> >        <soapbind:body use="literal" namespace="http://www.
> dreamworks.com/LevelService/"/>
> >      </input>
> >      <output name="getFxLevelsForShotResponse">
> >        <soapbind:body use="literal" namespace="http://www.
> dreamworks.com/LevelService/"/>
> >      </output>
> >    </operation>
> >  </binding>
> >
> >  <service name="LevelsXMLService">
> >     <port name="LevelsServicePort" binding="tns:
> LevelsXMLServiceSOAPBinding">
> >       <soap:address location="http://localhost:
> 8080/nile/services/LevelsService"/>
> >     </port>
> >  </service>
> >
> > </definitions>
> >
> >
>
> --
> Hernan Silberman
> PDI/Dreamworks
> ext.29162 / 650-562-9162 / cell 415-810-5809
> text pager: page-hsilberm@anim.dreamworks.com
>


Mime
View raw message