我从服务器端的Axis Web服务通过线路发送了一个数组MyBean
。我通过添加
<beanMapping qname="MyBean" xmlns:ns="myns.MyBeanService"
languageSpecificType="java:myns.Appartment"/>
现在我在客户端得到No deserializer for {myns.MyBean}MyBean
。我怎么能告诉客户端使用默认的BeanSerializer和BeanDeserializer,因为没有server-config.wsdd?
答案 0 :(得分:0)
(source p51)在客户端类MyServiceSoapBindingStub
中,紧跟在
org.apache.axis.client.Call _call = createCall();
添加
QName qn = new QName("myns.MyBeanService", "MyBean");
call.registerTypeMapping(MyBean.class, qn,
new BeanSerializerFactory(cl, qn),
new BeanDeserializerFactory(cl, qn));
这要求客户提供MyBean.java
。
此外,如果MyBean
有子bean,则应为所有子bean添加相同的代码。定义像这样的utils类很方便:
public final class WSUtils {
public static void handleSerialization(Call call, String ns, String bean, Class cl) {
QName qn = new QName(ns, bean);
call.registerTypeMapping(cl, qn,
new BeanSerializerFactory(cl, qn),
new BeanDeserializerFactory(cl, qn));
}
}
可以在createCall()
之后使用:
WSUtils.handleSerialization(_call, "myns.MyBeanService", "MyBean", MyBean.class);
和子豆:
WSUtils.handleSerialization(_call, "myns.MyBeanService", "MySubBean", MySubBean.class);