轴客户端 serializer/deserializer

Axis client side serializer/deserializer

我有一个数组 MyBean 从我的服务器端 Axis Web 服务通过网络发送。我通过添加

让序列化在客户端工作
<beanMapping qname="MyBean" xmlns:ns="myns.MyBeanService"
                 languageSpecificType="java:myns.Appartment"/>

现在我在客户端得到 No deserializer for {myns.MyBean}MyBean。我怎样才能告诉客户端使用默认的 BeanSerializer 和 BeanDeserializer,因为没有服务器-config.wsdd?

(source p51) 在客户端 class 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 class 很方便:

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

对于子 bean:

WSUtils.handleSerialization(_call, "myns.MyBeanService", "MySubBean", MySubBean.class);