The problem is either in the way the arguments are copied over or the way getParameter(s) handle them. Not knowing the intent of the MultiPartFilter author it's not easy for me to decide.
What happens is, that when the parameters from the query string are copied over in the line:
MultiMap params = new MultiMap(request.getParameterMap());
then the MultiMapFilter.map will contain entries with a string as key and a string array as a value. E.g. the entry for x will have a String as key with value x and its value will be String
. After adding the form parameters to it the map will have
x String array with one element with value "1".
y Array with two entries:
 ist another String array with one element with value "2".
 is a byte array with value [0x50,0x50] (the parameter value "22").
z is a byte array with value [0x51,0x51] (the parameter value"33").
The MultiPart.Wrapper getParameter method fails in this way:
when it aks for the value for y it gets the array of array which it cannot handle, a it expects either single byte or String or an array of Strings.
It handles correctly the case of x=1 though.
The MultiPart.Wrapper getParameterValues method fails in this way:
When it asks for the value of x it gets an ArrayList containing the String-array. It iterates over the array list expecting only byte-arrays and strings in it and fails.
When it asks for the value of y it gets an ArrayList containing the String-array anf the byte-array. It iterates over the array list expecting only byte-arrays and strings in it and fails.
So the Wrapper get methods do not handle the map as it was constructed. There is either an error in the get methods or in the way the map is built in the first place.