Today, I use the spring hessian to transfer the BigDecimal value but when I get the value on server is zero, there are two ways to resolve:
first:adding files META-INF/hessian/serializers with "java.math.BigDecimal=com.caucho.hessian.io.StringValueSerializer" and META-INF/hessian/deserializers with "java.math.BigDecimal=com.caucho.hessian.io.BigDecimalDeserializer".
second:build our own SerializerFactory but we do not return com.caucho.hessian.io.BigDecimalDeserializer because it is not checking for null.
public class BigDecimalSerializerFactory extends AbstractSerializerFactory {
private BigDecimalSerializer bigDecimalSerializer = new BigDecimalSerializer();
private BigDecimalDeserializer bigDecimalDeserializer = new BigDecimalDeserializer();
@Override
public Serializer getSerializer(Class cl) throws HessianProtocolException {
if (BigDecimal.class.isAssignableFrom(cl)) {
return bigDecimalSerializer;
}
return null;
}
@Override
public Deserializer getDeserializer(Class cl) throws HessianProtocolException {
if (BigDecimal.class.isAssignableFrom(cl)) {
return bigDecimalDeserializer;
}
return null;
}
To use this you have to do this both, on server side and client side:
HINT! In our case we have had a combined problem with BigDecimal and DateTime. Thus stacktraces and the debug views were weird. So if you use "non-standard" objects check them for their serialization!