code: private void writeRequest(String methodName, Object argument, OutputStream output, String id) throws IOException {
  		internalWriteRequest(methodName, argument, output, id);
  	}
docs: Writes a JSON-RPC request to the given {@link OutputStream}.
  If the value passed for argument is null then the {@code params}
  property is omitted from the JSON-RPC request.  If the argument
  is not not null then it is used as the value of the {@code params}
  property.  This means that if a POJO is passed as the argument
  that it's properties will be used as the param, ie:
  <pre>
  class Person {
  String firstName;
  String lastName;
  }
  </pre>
  becomes:
  <pre>
  "params" : {
  "firstName" : ..;
  "lastName" : ..;
  }
  </pre>
  The same would be true of a {@link Map} containing the keys
  {@code firstName} and {@code lastName}.  If the argument passed
  in implements the {@link Collection} interface or is an array
  then the values are used as indexed parameters in the order that
  they appear in the {@link Collection} or array.
  
  @param methodName the method to invoke
  @param argument   the method argument
  @param output     the {@link OutputStream} to write to
  @param id         the request id
  @throws IOException on error