in proton-j/src/main/java/org/apache/qpid/proton/codec/ArrayType.java [833:908]
protected void writeEncodedValue(final Object[] val)
{
TypeEncoding underlyingEncoder;
if(_val != val)
{
_val = val;
_underlyingEncoder = underlyingEncoder = calculateEncoder(val, getEncoder());
_size = calculateSize(val, underlyingEncoder);
}
else
{
underlyingEncoder = _underlyingEncoder;
}
getEncoder().writeRaw((byte)val.length);
underlyingEncoder.writeConstructor();
for(Object o : val)
{
if(o.getClass().isArray() && o.getClass().getComponentType().isPrimitive())
{
ArrayEncoding arrayEncoding = (ArrayEncoding) underlyingEncoder;
ArrayType arrayType = (ArrayType) arrayEncoding.getType();
Class componentType = o.getClass().getComponentType();
if(componentType == Boolean.TYPE)
{
boolean[] componentArray = (boolean[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Byte.TYPE)
{
byte[] componentArray = (byte[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Short.TYPE)
{
short[] componentArray = (short[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Integer.TYPE)
{
int[] componentArray = (int[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Long.TYPE)
{
long[] componentArray = (long[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Float.TYPE)
{
float[] componentArray = (float[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Double.TYPE)
{
double[] componentArray = (double[]) o;
arrayEncoding.writeValue(componentArray);
}
else if(componentType == Character.TYPE)
{
char[] componentArray = (char[]) o;
arrayEncoding.writeValue(componentArray);
}
else
{
throw new IllegalArgumentException("Cannot encode arrays of type " + componentType.getName());
}
}
else
{
underlyingEncoder.writeValue(o);
}
}
}