Axis客户端串行器/解串器

时间:2016-05-07 11:13:15

标签: java serialization axis2

我从服务器端的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?

1 个答案:

答案 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);