serializer和deserializer節點是指向你的自定義serializer和deserializer的工廠類,而不是serializer和deserializer類本身,這個要注意。 由于不需要序列化的自定義,所以一開始我用的AXIS原有的CalendarSerializerFactory,但是發現有問題,參考CustomizedCalendarSerializerFactory中create方法的注釋不分。所以后來還是加上了自定義的Serializer,但是很簡單了(注意繼承的父類):
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);
}
// 這個static的create方法是必須的。如果使用前面介紹的編程注冊TypeMapping的方式,就不需要這個create方法;如果是定義在client-config.wsdd文件中,
//AXIS在初始化的時候,org.apache.axis.deployment.wsdd.WSDDDeployment.deployMapping方法會調用factory的create方法,如果沒有這個方法,就不能注冊成功
// 對于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 ========="); //為了測試是否到達了自定義的類
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);
}
}
----------------------------------------------------------------------------------
有了這個方法,就可以不擔心服務器端返回奇怪的數據了。
posted on 2008-07-25 14:02
YODA 閱讀(4497)
評論(0) 編輯 收藏