package com.alibaba.doris.client.interceptor; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.alibaba.doris.client.operation.OperationData; import com.alibaba.doris.common.Namespace; import com.alibaba.doris.common.serialize.Serializer; import com.alibaba.doris.dproxy.AbstractInterceptor; import com.alibaba.doris.dproxy.InvokeInfo; /** * @author frank */ public class MapSerializeInterceptor extends AbstractInterceptor { public void before(InvokeInfo info) throws Throwable { OperationData operationData = (OperationData) info.getArgs()[0]; List<Object> args = operationData.getArgs(); Map<Object, Object> map = (Map<Object, Object>) args.get(0); Namespace namespace = operationData.getNamespace(); String serializeModeClass = namespace.getSerializeMode(); String deserializeTargetClassString = namespace.getClassName(); Serializer serializer = null; if (serializeModeClass != null && serializeModeClass.trim().length() > 0) { SerializerManager serializerManager = SerializerManager.getInstance(); serializer = serializerManager.getSerializer(serializeModeClass); } else { throw new IllegalArgumentException("Unknown selialize mode or selializer."); } for (Entry<Object, Object> e : map.entrySet()) { byte[] serializedValue = null; serializedValue = serializer.serialize(e.getValue(), deserializeTargetClassString); map.put(e.getKey(), serializedValue); } } }