解决基于axis的webservice问题:No deserializer defined for array type

关于 No deserializer defined for array type这个问题真是困扰我好长的时间啊!!!耗费了太长的时间了!网上很多网友的解决方案是在server-config.wsdd文件的自配<service>中加入typemapping项,可是我加了还是不能解决!而且,我的本来的server-config.wsdd文件中已经有了

<beanMapping
     languageSpecificType="java:webservices.Book"
     qname="ns1:book"
     xmlns:ns1="http://127.0.0.1:8080/testWebService2/services/myService"/>

在这里有个问题就是qname="ns1:book" ,book不是Book!!!!!!!!

我去掉typemapping,保留beanmapping!!!然后建立client测试,代码如下:

 

public   class  TestClient  {
 
public static void main(String[] args) {
  Service service 
= new Service();
  
try{
           Call call = (Call)service.createCall();
      QName qn 
= new QName("http://127.0.0.1:8080/testWebService2/services/myService","book");
   call.registerTypeMapping(Book.
class, qn, new BeanSerializerFactory(Book.class,qn), new BeanDeserializerFactory(Book.class,qn));
   call.setTargetEndpointAddress(
"http://127.0.0.1:8080/testWebService2/services/myService?wsdl");
   call.setOperationName(
new QName("http://127.0.0.1:8080/testWebService2/services/myService","show"));
   Book[] books 
= (Book[]) call.invoke(new Object[]{}); 
   System.out.println(books);
  }
catch(Exception e){
   e.printStackTrace();
  }

 }

}

 

这里也要注意的是   

QName qn  =   new  QName( " http://127.0.0.1:8080/testWebService2/services/myService " , " book " );

也要与配置文件server-config.wsdd中的对应,book也不是Book!!!!!然后就是注册对这个namespace命名的类进行加序列,解序列工厂类!!

QName qn  =   new  QName( " http://127.0.0.1:8080/testWebService2/services/myService " , " book " );
   call.registerTypeMapping(Book.
class , qn,  new  BeanSerializerFactory(Book. class ,qn),  new  BeanDeserializerFactory(Book. class ,qn));
如果以上这些你都做了,还是出现标题中的异常的话,那么就要看看你的调用方法了,是不是把call.setOperationName写成了call.setOperation这两个方法差别是很大的哦!!!!关于源代码,我还没来得急钻研!!!各位,如果有碰到这个问题还没有解决的,可以借鉴一下的!应该就出了这些问题的!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值