7
回答
java.lang.ClassCastException: Ljava.lang.Object; cannot be cast to [Lobject.SimpleObject;

我要做的是webService中返回数组 但是

我在运行 axis1.4 client中报错 说object转换不了 自定义对象

 call.setOperationName(arryQn);
   call.setTargetEndpointAddress(new URL(wsdlUrl));
   SimpleObject[] array =null;
   //array =(SimpleObject[])call.invoke(new Object[]{new Integer(1),new Integer(5)});
   Object[] a =new Object[]{1,5};
   Object oarr =call.invoke(a);  // 出现异常 的地方
   System.out.println(oarr);
   array=(SimpleObject[])JavaUtils.convert(oarr, SimpleObject[].class);
   System.out.println(array[2].getStr());

出现错误是说

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode:
 faultString: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lobject.SimpleObject;
 faultActor:
 faultNode:
 faultDetail:
 {http://xml.apache.org/axis/}hostname:BJB0535

错的只是客户端 ,服务端保存了 数组

我的server-config.wsdd配置service为

<service name="SimpleObjectService" provider="java:RPC">
     <parameter name="allowMethods" value="*"></parameter>
     <parameter name="className" value="object.SimpleObjectService"></parameter>
     <beanMapping languageSpecificType="java:object.SimpleObject"
      qname="ns:SimpleObject" xmlns:ns="urn:BeanService">
     </beanMapping>

<arrayMapping
      languageSpecificType="java:object.SimpleObject[]"
      qname="nsl:SimpleObject" xmlns:nsl="urn:BeanService"
      deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
      serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
       encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     ></arrayMapping>

</service>
举报
vitou
发帖于5年前 7回/5K+阅
共有7个答案 最后回答: 5年前

 Object resp =call.invoke(new Object[]{new Integer(1),new Integer(5)});
    System.out.println(resp);
       array=(SimpleObject[])JavaUtils.convert(resp, SimpleObject[].class);
       System.out.println(array[2].getStr());

 

我今天早上的时候就是用的这个方法来取的 当时还是报错了

今天下午一同事 说了 用这方法 现在可以了 我XXx 

服务端要求的参数是 SimpleObject[] 可你传入的是 Object[] ,这肯定不行

Java 里是不能对数组进行这种强制类型转换的

--- 共有 1 条评论 ---
vitou我要实现的是 服务端 返回值是SimpleObject[] 参数是 我自己弄的2个基本类型 int的 数值 5年前 回复

服务端的service代码

 public SimpleObject[] arrySimpleObject(int i,int y){
  System.out.println("SimpleObjectService arrySimpleObject invoked!");
  List<SimpleObject> list= new ArrayList<SimpleObject>();
  for(int k=i;k<y;k++){
   SimpleObject so =new SimpleObject();
   so.setI(1+k);
   so.setF(k+0.1f);
   so.setStr(k+"ysc");
   list.add(so);
   System.out.println(list);
  }
  SimpleObject[] array =new SimpleObject[list.size()];
  System.out.println("array :"+(SimpleObject[])list.toArray(array));
  System.out.println("arrySimpleObjec end");
  array =(SimpleObject[])list.toArray(array);
  for(int j=0;j<list.size();j++){
   System.out.println(array[j]+"    "+array[j].getStr());
  }
  return (SimpleObject[])list.toArray();

怎么不用 wsdl2java 来生成调用这个 web 服务的 Stub ,调用起来多方便啊
--- 共有 2 条评论 ---
红薯回复 @vitou : 如果是用 wsdl2java 就会帮你生成一样的,但不一定非要是同一个。毕竟web服务是支持多语言的 5年前 回复
vitou还有个问题想请教下,就是返回值为自定义对象 是不是 服务和客户端的 对象的要求是一模一样 ? 5年前 回复

最好不要用axis1,感觉太麻烦了。推荐axis2或者cxf

--- 共有 1 条评论 ---
vitou恩 感谢 你的建议 以后不用这个了 就是配置麻烦其他的还好 5年前 回复
顶部