The <ns:GetAdapInfoResponse> element is *not* part of the XML you can
map. You can only map elements within that one, i.e. that element
delimits the response "parameters". It is *not* part of the
"parameters" themselves.
On 4 Mar 2003 at 7:25, Doug Haigh wrote:
> I thought that the following line in my code did that for me
>
> smr.mapTypes(Constants.NS_URI_SOAP_ENC,
> new QName("urn:remote-adap", "GetAdapInfoResponse"),
> AdapterInfo.class,
> beanSer,
> beanSer);
>
> Why does this mapping not associate the 'GetAdapInfoResponse' XML structure
> in the urn:remote-adap response into the AdapterInfo class?
>
> Doug
>
> -----Original Message-----
> From: Scott Nichol [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 04, 2003 1:02 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Response Data Mapping Problems
>
>
> Just as the element
>
> <ns1:GetAdapterInfo xmlns:ns1="urn:remote-adap"
> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
>
> is used to wrap the parameters for the method call,
>
> <ns:GetAdapInfoResponse>
>
> is used to wrap the return value and output parameters. In other
> words, this element is not part of the return value, so you cannot
> use this element as part of deserializing the return. If QueryError,
> AdapterID, MemBase and IoBase are supposed to be members of a
> structure, then they should be wrapped in an additional XML element,
> such as
>
> <ns:GetAdapInfoResponse>
> <AdapterInfo xsi:type="ns:AdapterInfo">
> <QueryError xsi:type="xsd:int">0</QueryError>
> <AdapterID xsi:type="xsd:int">1</AdapterID>
> <MemBase xsi:type="xsd:int">-100663296</MemBase>
> <IoBase xsi:type="xsd:int">-68173824</IoBase>
> </AdapterInfo>
> </ns:GetAdapInfoResponse>
>
>
> On 3 Mar 2003 at 20:43, Doug Haigh wrote:
>
> > I am trying to write a Java client that uses Apache SOAP to connect to a
> > service running gSOAP. I have tried to model it after the addressbook
> > example in the Apache SOAP toolkit. Unfortunately, when I get back the
> > response, instead of mapping the data into an AdapterInfo object, the
> > QueryError is mapped as the response value and the other fields in the
> > struct are stuck in an vector. Can someone please tell me what is going
> > wrong?
> >
> > Thanks
> >
> >
> > ---------------------------------------------
> > Code:
> >
> >
> > public class AdapterInfo
> > {
> > private int QueryError;
> > private int AdapterID;
> > private int MemBase;
> > private int IoBase;
> >
> > public AdapterInfo()
> > {
> > }
> >
> > public AdapterInfo( int QueryError,
> > int AdapterID,
> > int MemBase,
> > int IoBase)
> > {
> > this.QueryError = QueryError ;
> > this.AdapterID = AdapterID ;
> > this.MemBase = MemBase ;
> > this.IoBase = IoBase ;
> > }
> >
> >
> > public void setQueryError(int QueryError)
> > {
> > this.QueryError = QueryError;
> > }
> >
> > public int getQueryError()
> > {
> > return QueryError;
> > }
> >
> >
> > public void setAdapterID(int AdapterID)
> > {
> > this.AdapterID = AdapterID;
> > }
> >
> > public int getAdapterID()
> > {
> > return AdapterID;
> > }
> >
> >
> > public void setMemBase(int MemBase)
> > {
> > this.MemBase = MemBase;
> > }
> >
> > public int getMemBase()
> > {
> > return MemBase;
> > }
> >
> >
> > public void setIoBase(int IoBase)
> > {
> > this.IoBase = IoBase;
> > }
> >
> > public int getIoBase()
> > {
> > return IoBase;
> > }
> >
> >
> > public String toString()
> > {
> > return "Adapter ID = " + AdapterID + "\n" +
> > "Query error = " + QueryError + "\n" +
> > "Memory base = " + MemBase + "\n" +
> > "IO base = " + IoBase + "\n";
> > }
> > }
> >
> >
> > public String GetAdapterInfo(int AdapterID) // Response???
> > {
> > String output = "";
> >
> > try
> > {
> > Call call = new Call();
> > SOAPMappingRegistry smr = new SOAPMappingRegistry();
> > BeanSerializer beanSer = new BeanSerializer();
> > Vector params = new Vector();
> > Response resp;
> >
> > smr.mapTypes(Constants.NS_URI_SOAP_ENC,
> > new QName("urn:remote-adap", "GetAdapInfoResponse"),
> > AdapterInfo.class,
> > beanSer,
> > beanSer);
> >
> > call.setSOAPMappingRegistry(smr);
> > call.setTargetObjectURI("urn:remote-adap");
> > call.setMethodName("GetAdapterInfo");
> > call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
> >
> > params.addElement(new org.apache.soap.rpc.Parameter("Adapter",
> > int.class, new Integer(AdapterID), null));
> >
> > call.setParams(params);
> >
> > resp = call.invoke(ServerUrl, "");
> >
> > System.out.println("invoke response=" + resp.generatedFault());
> >
> > // Check the response.
> > if (!resp.generatedFault())
> > {
> > Vector retParams = resp.getParams();
> > Parameter ret = resp.getReturnValue();
> > Object info = ret.getValue();
> > int i;
> >
> > System.out.println("response body part=" +
> > resp.getBodyPart(0).toString());
> > System.out.println("response part count=" + resp.getPartCount());
> > System.out.println("vector part count=" + retParams.size());
> >
> > for (i=0; i < retParams.size(); i++)
> > {
> > Parameter param = (Parameter)retParams.elementAt(i);
> >
> > System.out.println("vector part "+i+" type=" +
> > param.getValue().getClass());
> > }
> >
> > System.out.println("output type=" + info.getClass());
> >
> > output = info.toString();
> >
> > System.out.println("output=" + output);
> > }
> > else
> > {
> > Fault fault = resp.getFault();
> >
> > System.err.println("Generated fault: " + fault);
> > }
> > }
> > catch (SOAPException se)
> > {
> > System.err.println("Caught SOAPException (" +
> > se.getFaultCode() + "): " +
> > se.getMessage());
> > return output;
> > }
> > catch (MessagingException me)
> > {
> > System.err.println("Caught MessagingException:" +
> > me.getMessage());
> > return output;
> > }
> >
> > return output;
> > }
> >
> >
> >
> > ------------------------------------------------------------
> > Request:
> >
> > <?xml version='1.0' encoding='UTF-8'?>
> > <SOAP-ENV:Envelope
> > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> > <SOAP-ENV:Body>
> > <ns1:GetAdapterInfo xmlns:ns1="urn:remote-adap"
> > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> > <Adapter xsi:type="xsd:int">1</Adapter>
> > </ns1:GetAdapterInfo>
> > </SOAP-ENV:Body>
> > </SOAP-ENV:Envelope>
> >
> >
> > ------------------------------------------------------------
> > Response:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <SOAP-ENV:Envelope
> > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
> >
> > xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> > xmlns:ns="urn:remote-adap">
> > <SOAP-ENV:Body
> > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> > <ns:GetAdapInfoResponse>
> > <QueryError xsi:type="xsd:int">0</QueryError>
> > <AdapterID xsi:type="xsd:int">1</AdapterID>
> > <MemBase xsi:type="xsd:int">-100663296</MemBase>
> > <IoBase xsi:type="xsd:int">-68173824</IoBase>
> > </ns:GetAdapInfoResponse>
> > </SOAP-ENV:Body>
> > </SOAP-ENV:Envelope>
> >
>
>
> Scott Nichol
>
> Do not reply directly to this e-mail address, as it is filtered to
> only receive e-mail from specific mailing lists.
>
>
>
>
>
Scott Nichol
Do not reply directly to this e-mail address,
as it is filtered to only receive e-mail from
specific mailing lists.