2016-05-07 10 views
2

私のサーバ側のAxis Webサービスからワイヤを介して送信されたMyBeanの配列があります。私は今、私はクライアント側でNo deserializer for {myns.MyBean}MyBeanを取得Axisクライアントサイドシリアライザ/デシリアライザ

<beanMapping qname="MyBean" xmlns:ns="myns.MyBeanService" 
       languageSpecificType="java:myns.Appartment"/> 

を追加することにより、クライアント側での作業シリアライズを得ました。 server-config.wsddがないので、クライアントにデフォルトのBeanSerializerとBeanDeserializerを使用するように指示するにはどうすればよいですか?

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

を追加し、クライアント側のクラスMyServiceSoapBindingStub

答えて

0

source p51)は、これがMyBean.javaのコピーを有するクライアントが必要です。

また、MyBeanにサブビーンがある場合は、すべてのサブビーンに対して同じコードを追加する必要があります。このようなutilsのクラスを定義するには便利なものです。このようなcreateCall()後に使用することができます

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

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

とサブBeanの