关于 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...{
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");
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.registerTypeMapping(Book. class , qn, new BeanSerializerFactory(Book. class ,qn), new BeanDeserializerFactory(Book. class ,qn));