axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ramaswamy, Muthu" <mramasw...@gers.com>
Subject Server throws ClassCastException when List member is referenced.
Date Sat, 16 Nov 2002 03:24:35 GMT
Hi All-

I am able to return an object that contains List, from a service. 
When I return the same object to the Server and then refer the objects in
the list, I get java.lang.ClassCastException.

The echoBean method takes the SimpleTestBean object as an argument. It then
prints the List members.

(1) Following is the RPC call issued by the Axis Client. 
========================================
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
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"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
 <soapenv:Body>
  <ns1:echoBean xmlns:ns1="SimpleTest">
   <SimpleTestBean>
    <name>Your Name</name>
    <phones SOAP-ENC:arrayType="xsd:any[3]">
     <item>
      <phoneType>Home</phoneType>
      <phoneNum>123 456 7890</phoneNum>
     </item>
     <item>
      <phoneType>Work</phoneType>
      <phoneNum>789 012 3456</phoneNum>
     </item>
     <item>
      <phoneType>Cell</phoneType>
      <phoneNum>345 012 3456</phoneNum>
     </item>
    </phones>
    <place>Your Place</place>
   </SimpleTestBean>
  </ns1:echoBean>
 </soapenv:Body>
</soapenv:Envelope>

(2) Here is the Code for SimpleTestBean.
=============================
public class SimpleTestBean {

  private String name;
  private String place;
  private List phones;

  public SimpleTestBean() {
     name = "Your Name";
     place = "Your Place";
  }

  public void setName(String name)
  {
     this.name = name;
  }

  public String getName()
  {
     return this.name;
  }

  public void setPlace(String place)
  {
     this.place = place;
  }

  public String getPlace()
  {
     return this.place;
  }

  public List getPhones()
  {
     return this.phones;
  }

  public void setPhones(List phones)
  {
     this.phones = phones;
  }
}

(3) Here is the code for the echoBean method in the SimpleTest service
====================================================
public void echoBean(SimpleTestBean stb)
  {
     System.out.println("name is" + stb.getName());
     System.out.println("place is" + stb.getPlace());
     List myPhoneList = stb.getPhones();

     for (int i=0; i<myPhoneList.size(); i++)
     {
        SimplePhoneBean spb = (SimplePhoneBean) myPhoneList.get(i);  //this
line throws the ClassCastException.
        System.out.println("Printing Phone List");
        System.out.println(spb.getPhoneType() + ":" + spb.getPhoneNum());
     }

  }

Question:
=======
I get the ClassCastException when I try to refer the List member. 
When I tested the function from a Java client it works fine. Problem is
after de-serialization by Axis. 
The myPhoneList.size() returns three, which is correct as I send three
arrays. 
Problem is when I try to cast it to the SimplePhoneBean object, I get the
error.

Appreciate your input to solve my problem.

Thanks., 

-Muthu

Mime
View raw message