BoundSingleParameter(final Method method, final Class<?> type, final boolean optional) {
   this.type = type;
   int pos = -1;
   for (int i = 0; i < method.getParameterTypes().length; ++i) {
     boolean pathParam = false;
     for (Annotation annotation : method.getParameterAnnotations()[i]) {
       if (annotation.annotationType().equals(PathParam.class)) {
         pathParam = true;
         break;
       }
     }
     if (pathParam) {
       continue;
     }
     if (method.getParameterTypes()[i].equals(type)) {
       if (pos != -1) {
         throw JsrWebSocketMessages.MESSAGES.moreThanOneParameterOfType(type, method);
       }
       pos = i;
     }
   }
   if (pos != -1) {
     position = pos;
   } else if (optional) {
     position = -1;
   } else {
     throw JsrWebSocketMessages.MESSAGES.parameterNotFound(type, method);
   }
 }