serializer和deserializer節(jié)點(diǎn)是指向你的自定義serializer和deserializer的工廠類(lèi),而不是serializer和deserializer類(lèi)本身,這個(gè)要注意。 由于不需要序列化的自定義,所以一開(kāi)始我用的AXIS原有的CalendarSerializerFactory,但是發(fā)現(xiàn)有問(wèn)題,參考CustomizedCalendarSerializerFactory中create方法的注釋不分。所以后來(lái)還是加上了自定義的Serializer,但是很簡(jiǎn)單了(注意繼承的父類(lèi)):
CustomizedCalendarSerializer.java:
----------------------------------------------------------------------------------
package lab.serviceclient.mis;
import org.apache.axis.encoding.ser.CalendarSerializer;
public class CustomizedCalendarSerializer extends CalendarSerializer {
private static final long serialVersionUID = 1L;
}
----------------------------------------------------------------------------------
CustomizedCalendarSerializerFactory.java:
----------------------------------------------------------------------------------
package lab.serviceclient.mis;
import javax.xml.namespace.QName;
import org.apache.axis.encoding.ser.BaseSerializerFactory;
public class CustomizedCalendarSerializerFactory extends BaseSerializerFactory {
private static final long serialVersionUID = 1L;
public CustomizedCalendarSerializerFactory(Class javaType, QName xmlType) {
super(CustomizedCalendarSerializer.class, xmlType, javaType);
}
// 這個(gè)static的create方法是必須的。如果使用前面介紹的編程注冊(cè)TypeMapping的方式,就不需要這個(gè)create方法;如果是定義在client-config.wsdd文件中,
//AXIS在初始化的時(shí)候,org.apache.axis.deployment.wsdd.WSDDDeployment.deployMapping方法會(huì)調(diào)用factory的create方法,如果沒(méi)有這個(gè)方法,就不能注冊(cè)成功
// 對(duì)于Deserializer也是一樣的
public static CustomizedCalendarSerializerFactory create(Class javaType, QName xmlType) {
return new CustomizedCalendarSerializerFactory(javaType, xmlType);
}
}
----------------------------------------------------------------------------------
CustomizedCalendarDeserializer.java
----------------------------------------------------------------------------------
package lab.serviceclient.mis;
import javax.xml.namespace.QName;
import org.apache.axis.encoding.ser.CalendarDeserializer;
public class CustomizedCalendarDeserializer extends CalendarDeserializer {
private static final long serialVersionUID = 1L;
public CustomizedCalendarDeserializer(Class javaType, QName xmlType) {
super(javaType, xmlType);
}
public Object makeValue(String source) {
System.out.println("========= This is the Customized Calendar Deserializer ========="); //為了測(cè)試是否到達(dá)了自定義的類(lèi)
if ( source == null || source.length() == 0 || "T".equals(source)) return null;
return super.makeValue(source);
}
}
----------------------------------------------------------------------------------
CustomizedCalendarDeserializerFactory.java
----------------------------------------------------------------------------------
package lab.serviceclient.mis;
import javax.xml.namespace.QName;
import org.apache.axis.encoding.ser.BaseDeserializerFactory;
import org.apache.axis.encoding.ser.CalendarDeserializer;
public class CustomizedCalendarDeserializerFactory extends BaseDeserializerFactory {
private static final long serialVersionUID = 1L;
public CustomizedCalendarDeserializerFactory(Class javaType, QName xmlType) {
super(CustomizedCalendarDeserializer.class, xmlType, javaType);
}
public static CustomizedCalendarDeserializerFactory create(Class javaType, QName xmlType) {
return new CustomizedCalendarDeserializerFactory(javaType, xmlType);
}
}
----------------------------------------------------------------------------------
有了這個(gè)方法,就可以不擔(dān)心服務(wù)器端返回奇怪的數(shù)據(jù)了。
posted on 2008-07-25 14:02
YODA 閱讀(4497)
評(píng)論(0) 編輯 收藏