代码:
Server
public class A{
 public List getA(){
  List result=new ArrayList();
  for(int i=0;i<10;i++){
    Bean a=new Bean();
    a.set()....
    result.add(a);
  }
  return result;
}
这样在CLIENT端调用的时候可以得到list 但是里面的Bean确成了Object对像,,不能强制转化为Bean对像,请高手看一下,分还可以加,,谢谢

解决方案 »

  1.   

    应该是一个复杂类型的web返回值,强制转换要出错的
      

  2.   

    我也想知道怎样做,但在没有想到这些方法前,我是这样做的:
    把这些对象转换成XML,然后以字符串的形式发送出去
      

  3.   

    那样是不是太麻烦了找了一些资说,先在WDLL文件里定义LIST,和BEAN然后在CLIENT端注册 一下就可以了,但是就是出不来结果,,
      

  4.   

    我想你在WSDL文件中没有定义Bean复杂类型吧。
      

  5.   


    ll42002(灰舌) ,,这样定义对吗??    <service name="urn:WebServiceList" provider="java:RPC">        <parameter name="allowedMethods" value="*"/>        <parameter name="className" value="webservice.WebServiceList"/>
        </service>
            <beanMapping qname="myNS:List" xmlns:myNS="urn:BeanService" 
    languageSpecificType="java:java.util.List"/>
     <beanMapping qname="myNS:Person" xmlns:myNS="urn:BeanService" 
    languageSpecificType="java:webservice.PersonImpl"/>
      

  6.   

    楼主,还没解决吗,老生常谈的问题。 
    只有自定义的Bean需要注册,List不需要注册。Axis会自行序列化的。
      

  7.   

    用Vector来存放你的Bean对象,就不用定义注册了,楼主可以试试。
      

  8.   

    谢谢各位
    但是现在用Vector或用LIST都能返回结果,但是我强制转化时报错说类型不匹配
    [Ljava.lang.Object;@120cc56public class WebServiceClientList {
        private static final String serverAddress =        "http://localhost/sex/WebServiceList.jws";        private static final String s_serviceName = "WebServiceList";
            public Vector getPersonInfo(String name, int age, int tall, boolean sex) {
                Service service = new Service();
                Call call = null;
                Vector person = new Vector();
                try {
                    call = (Call) service.createCall();
                    call.setTargetEndpointAddress(new java.net.URL(serverAddress));
                    
                    QName q_person = new QName("urn:BeanService", "Person");
                    call.registerTypeMapping(PersonImpl.class, q_person,
                            new org.apache.axis.encoding.ser.BeanSerializerFactory(PersonImpl.class, q_person),
                            new org.apache.axis.encoding.ser.BeanDeserializerFactory(PersonImpl.class, q_person));
                    
    //                QName qn = new QName("urn:BeanService", "List","Person");
    //                
    //                call.registerTypeMapping(List.class, qn,
    //                new org.apache.axis.encoding.ser.BeanSerializerFactory(List.class, qn),
    //                new org.apache.axis.encoding.ser.BeanDeserializerFactory(List.class, qn));
                    
                    
                    QName qname=new QName("urn:WebServiceList","getPersonInfoList");
                    call.setOperationName(qname);
                    call.addParameter("name", qname, ParameterMode.IN);
                    call.addParameter("age", qname, ParameterMode.IN);
                    call.addParameter("tall", qname, ParameterMode.IN);
                    call.addParameter("sex", qname, ParameterMode.IN);
                    call.setReturnType(qname,Vector.class);
                   
                  person = (Vector) call.invoke(new Object[] { name,new Integer(age),new Integer(tall),new Boolean(sex) });
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return person;
            }       
    }
      

  9.   

    问题解决了,,换了Vector就可以,但是LIST却不行,,,不知为什么给分