code: @Override
  	public Object run(Object... args) {
  
  		assertLength(args, 2, 3);
  		
  		return process(assertAssignable(assertNotNull(args[0]), InvocationContext.class), 
  					   assertAssignable(assertNotNull(args[1]), HttpResponse.class), 
  					   (args.length > 2)? args[2] :null);
  	}
docs: <p>Accepts an {@link InvocationContext} and an {@link HttpResponse}, validates all preconditions
  and uses the metadata contained within the configuration to process and subsequently parse the
  request. Any implementations that wish to check additional preconditions or those that wish to
  alter this basic approach should override this method.</p>
  
  <p><b>Note</b> that this method is expected to return the <i>deserialized response entity</i> of
  the type specified by the request definition. This is passed along to all successive processors
  in the chain via the processor arguments.</p>
  
  <p>Delegates to {@link #process(InvocationContext, HttpResponse, Object)}.</p>
  
  <p>See {@link Processor#run(Object...)}.</p>
  
  @param args
  a array of <b>length 2 or more</b> with an {@link HttpResponse}, an {@link InvocationContext}
  and possibly the result of the deserialized response entity
  <br><br>
  @return the deserialized response entity, which may be {@code null} for endpoint request definitions
  which do not declare a return type or for those which the return type is {@link Void}
  <br><br>
  @throws IllegalArgumentException
  if the supplied arguments array is {@code null} or if the number of arguments is less than 2,
  or if the arguments are not of the expected type
  <br><br>
  @throws RequestProcessorException
  if response processing failed for the given {@link InvocationContext} and {@link HttpResponse}
  <br><br>
  @since 1.3.0