I noticed excludePattern doesn't work as expected in 2.1.8-SNAPSHOT.
The problem is prepare.wrapRequest(request), it's called whether or not isUrlExcluded() which is not what we want. The whole point of setting the struts.action.excludePattern property is to tell Struts2 to "lay off" the matching URLs.
The thing for me is that I have Struts2 in the same webapp as other stuff, Struts-1.1 being one of them, and I need the multipart-request to reach the Struts-1.1 actions which resides in an URL which matches the excludePattern.
Attached is a patch fixing it, hopefully this will make it in the 2.1.8-GA.