package com.jarvis.cache.serializer;
import java.io.IOException;
import java.lang.ref.WeakReference;
import com.caucho.hessian.io.AbstractHessianOutput;
import com.caucho.hessian.io.AbstractSerializer;
import com.caucho.hessian.io.ObjectSerializer;
import com.caucho.hessian.io.Serializer;
public class WeakReferenceSerializer extends AbstractSerializer implements ObjectSerializer {
@Override
public Serializer getObjectSerializer() {
return this;
}
@Override
public void writeObject(Object obj, AbstractHessianOutput out) throws IOException {
if(out.addRef(obj)) {
return;
}
@SuppressWarnings("unchecked")
WeakReference<Object> data=(WeakReference<Object>)obj;
int refV=out.writeObjectBegin(WeakReference.class.getName());
if(refV == -1) {
out.writeInt(1);
out.writeString("ref");
out.writeObjectBegin(WeakReference.class.getName());
}
if(data != null) {
Object ref=data.get();
if(null != ref) {
out.writeObject(ref);
} else {
out.writeNull();
}
} else {
out.writeNull();
}
}
}