很简单,自己实现VectorSerializer,在里面加上这样的判断:
if (src == null)
{
SoapEncUtils.generateNullStructure(inScopeEncStyle,
javaType,
context,
sink,
nsStack,
xjmr);
}当然要import org.apache.soap.encoding.soapenc.SoapEncUtils;
if (src == null)
{
SoapEncUtils.generateNullStructure(inScopeEncStyle,
javaType,
context,
sink,
nsStack,
xjmr);
}当然要import org.apache.soap.encoding.soapenc.SoapEncUtils;
不过我想这不是一个很好的办法我现在是将vector再封装一层SoapInfoBean.java,
public int state = -1;
public Vector soapV = new Vector();
用state来表示null和其它状态不知道有没有更好的办法,做一个单独的null的序列化器,不管vector、hashtabe还是其它的对象,都可以传null
对你的问题,我也只是就事论事。不过你已经考虑到更深层次的问题了,说明你确实思考过了。这样的讨论比单纯解决问题有意思的多。
我想你的方法不是很好。你这样还不如用重构中null objet来的更好些,何况你需要对用到的各种object都进行这样的处理。有些不合算哦。
所以,我的做法是:自己实现Serializer, Deserializer接口。比如:自己定义一个DataSerializer,public class DataSerializer implements Serializer, Deserializer
里面你需要自己实现unmarshall和marshall方法,方法定义如下: public void marshall(String inScopeEncStyle, Class javaType, Object src,
Object context, Writer sink, NSStack nsStack,
XMLJavaMappingRegistry xjmr, SOAPContext ctx)
throws IllegalArgumentException, IOException{}public Bean unmarshall(String inScopeEncStyle, QName elementType, Node src,
XMLJavaMappingRegistry xjmr, SOAPContext ctx)
throws IllegalArgumentException{}其中可以对javaType进行判断,进行null的处理。不知道这样好不好。。
Good Luck!