You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@xml.apache.org by Nick Reeves <Ni...@gtl.com> on 2000/09/01 18:56:48 UTC

Deserializer inefficiency

In SOAPMappingRegistry the same Deserializer is registered for all the
different Java atomic types:

    mapTypes(soapEncURI, stringQName, String.class, ser, deser);
    mapTypes(soapEncURI, booleanQName, Boolean.class, ser, null);
    mapTypes(soapEncURI, booleanQName, boolean.class, ser, deser);
    mapTypes(soapEncURI, doubleQName, Double.class, ser, null);
    mapTypes(soapEncURI, doubleQName, double.class, ser, deser);
    mapTypes(soapEncURI, floatQName, Float.class, ser, null);
    mapTypes(soapEncURI, floatQName, float.class, ser, deser);
    mapTypes(soapEncURI, longQName, Long.class, ser, null);
    mapTypes(soapEncURI, longQName, long.class, ser, deser);
    mapTypes(soapEncURI, intQName, Integer.class, ser, null);
    mapTypes(soapEncURI, intQName, int.class, ser, deser);
    mapTypes(soapEncURI, shortQName, Short.class, ser, null);
    mapTypes(soapEncURI, shortQName, short.class, ser, deser);
    mapTypes(soapEncURI, byteQName, Byte.class, ser, null);
    mapTypes(soapEncURI, byteQName, byte.class, ser, deser);

This means the deserializer has to dispatch again on QName which it does by
linear search :( 

By registering a different deserializer for each case and some simple
subclassing to implement them this could be avoided.

I mention this as it may be significant as it gets called for every Java
atomic value.