I have an Apache SOAP server set up in tomcat, the server side works fine, and I can see through the Eclipse TCP/IP monitor that it is returning the correct data. What I can't figure out is how to parse out the simple Integer[] array when it gets back to the client. I've been googling and reading documentation for two days, and am still drawing a blank, so I'm asking for help here. Below are listed some code excerpts, the Descriptor and SOAP request and response packets. You can see that the response is a simple array of integers, but I continually get ClassCastExceptions when I try to read out the data at the end. I'm guessing it's just some stupid little thing I'm missing, but I sure can't see it, and any suggestions will be greatly appreciated!!

This is the applicable piece of the client code. The stuff that is commented out is stuff I've tried and which failed to work:

       Response resp = call.invoke(url, "" );
       if ( resp.generatedFault() ) {
           System.out.println( "The call failed: " );
       } else {
           Parameter result = resp.getReturnValue();
//            Integer[] result = resp.getReturnValue();
System.out.println( "Rtn val = " + result.getValue());
           System.out.println( "resp Object type: " + result.getClass());
System.out.println( "resp Object toString: " + result.toString());
//            Integer[] rtnValues = ( Integer[] ) result.getValue(  );
           EddSrvResponse rtnValues = ( EddSrvResponse ) result.getValue();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This is where I get the ClassCastExecption.

/*            for ( ii = 0; ii < rtnValues.length; ii++ )
System.out.println( rtnValues[ ii ]); }
*/
           System.out.println( "XID   :  " + rtnValues.getXID() );
           System.out.println( "Status:  " + rtnValues.getStatus() );

//            Integer r = (Integer) result.getValue();
//            System.out.println( "Xid:" + r);
// System.out.println( result[0] );



EddSrvResponse is defined as:
public class EddSrvResponse {
   private Integer    xID;
   private Integer    status;
and has appropriate setters and getters which I won't bother to list here.



The Descriptor:

<?xml version="1.0" encoding="UTF-8"?>
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment";
   id="urn:wraEddServer">
       <isd:provider type="java"
           scope="Application"
           methods="getDataLine">
           <isd:java class="eddSrv.getDataLine"/>
       </isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
</isd:service>


The SOAP 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:getDataLine xmlns:ns1="urn:wraEddServer" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
<XID xsi:type="xsd:string">11</XID>
<Site xsi:type="xsd:string">22</Site>
<Time xsi:type="xsd:string">Wed Mar 15 08:28:26 EST 2006</Time>
<Data xsi:type="xsd:string">44</Data>
</ns1:getDataLine>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


The SOAP response:

<?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:getDataLineResponse xmlns:ns1="urn:wraEddServer" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";> <return xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="ns2:Array" ns2:arrayType="xsd:int[2]">
<item xsi:type="xsd:int">11</item>
<item xsi:type="xsd:int">0</item>
</return>
</ns1:getDataLineResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Thanks for any help!
Dave



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to