这是一个简单的web service程序,server端返回一个List(内含两个字符串),client端将字符串输出
我参考的是一个能返回字符串的程序,现在改成List,结果运行时在client端出了问题。
请高手指点一下,谢谢!环境:Tomcat5.5+AXIS1.4
//server端程序,编译正常!
import java.util.List;
import java.util.ArrayList;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class ListService
{
   public List getList()
    {
        List<String> list = new ArrayList<String>(); 
        list.add("xxxx");
        list.add("yyyy");
        return list;
    }
}
//client端
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import java.util.ArrayList;
import java.util.List;
public class ListClient
{
    public static void main(String [] args) throws Exception {       String endpoint = "http://localhost:" +"8080"+ "/axis/services/ListService";
        Service  service = new Service();
       Call  call  = (Call) service.createCall();
       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName("getList"  );
       List list = (List) call.invoke( new Object[] {} );       for(int i=0;i<list.size();i++)
           System.out.println(list.get(i));
   }
}
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
at test.backup.ListClient.main(ListClient.java:17)

解决方案 »

  1.   

      List list = (List) call.invoke( new Object[] {} );   不能进行强制转换,可能 invoke返回的方法不符合list的类型
      

  2.   

    TestList.java   
      import   java.util.*;   
      public   class   TestList{   
              public   ArrayList   Lists()   
              {   
                      ArrayList   list=new   ArrayList();   
      list.add(0,"0");   
      list.add(1,"这是正确的信息");   
      list.add(2,new   Date());   
      return   list;   
              }   
      }   
        
      <%@   page   contentType="text/html;   charset=gb2312"   language="java"   errorPage=""   %>   
      <%@   page   import="   org.apache.axis.client.Call"%>   
      <%@   page   import="   org.apache.axis.client.Service"%>   
      <%@   page   import="   java.util.*"%>   
      <%@   page   import="   javax.xml.namespace.QName"%>   
      <html>   
      <%   
      try   {   
      String   endpoint   =   "http://localhost:8080/axis/TestList.jws";   
                              Service   service   =   new   Service();   
                              Call   call   =   (Call)   service.createCall();   
                              call.setTargetEndpointAddress(new   java.net.URL(endpoint));   
      call.setOperationName("Lists");   
      call.setReturnType(new   QName("ArrayList"),ArrayList.class);   
                              ArrayList   list   =   (ArrayList)   call.invoke(new   Object[]{});   
      for(int   i=0;i<list.size();i++)   
      {   
      out.print(list.get(i)+"<br>");   
      }   
      }     
      catch   (Exception   ex)     
      {   
                ex.printStackTrace();   
      }   
      %>   
      </html>   
      

  3.   

    TestList.java   
      import   java.util.*;   
      public   class   TestList{   
              public   ArrayList   Lists()   
              {   
                      ArrayList   list=new   ArrayList();   
      list.add(0,"0");   
      list.add(1,"这是正确的信息");   
      list.add(2,new   Date());   
      return   list;   
              }   
      }   
        
      <%@   page   contentType="text/html;   charset=gb2312"   language="java"   errorPage=""   %>   
      <%@   page   import="   org.apache.axis.client.Call"%>   
      <%@   page   import="   org.apache.axis.client.Service"%>   
      <%@   page   import="   java.util.*"%>   
      <%@   page   import="   javax.xml.namespace.QName"%>   
      <html>   
      <%   
      try   {   
      String   endpoint   =   "http://localhost:8080/axis/TestList.jws";   
                              Service   service   =   new   Service();   
                              Call   call   =   (Call)   service.createCall();   
                              call.setTargetEndpointAddress(new   java.net.URL(endpoint));   
      call.setOperationName("Lists");   
      call.setReturnType(new   QName("ArrayList"),ArrayList.class);   
                              ArrayList   list   =   (ArrayList)   call.invoke(new   Object[]{});   
      for(int   i=0;i<list.size();i++)   
      {   
      out.print(list.get(i)+"<br>");   
      }   
      }     
      catch   (Exception   ex)     
      {   
                ex.printStackTrace();   
      }   
      %>   
      </html>