Ah, you've stumbled into one of my pet peeves - a catch that does nothing.

Look
here for more info. Consider - what happens if the caller specifies a field or method name that doesn't exist?
Other than that... now that I see what you're doing, I understand the reason for the Field/Method confusion. You can probably do this with either one, since reflection can access even private fields if done right. But it's probably better OO technique to use only the public methods, so I'd go with that solution.
The new code is definitely closer. Problems are:
"new Class[]" and "new Object[]" don't work - to make an array, you must specify a size (0 in this case).
The first parameter of the invoke method should be the instance that you're trying to invoke the method on. Meaning, the original obj1 instance (or obj2). A Method can be invoked for any instance of a class, and you need to tell it which one you're using.
Your original code had a similar problem using Field - the Field represents the
concept of a particular field, across all instances of the field's containing class; it does not represent a particular
value of the field. To get a partucular value of a Field, you use the get(Object) method of Field. As for the invoke(Object, Object[]) method of Method, the first parameter represents the particular instance of a class, for which you want to know the value of the given field.
Back to the Method version, the latter part of the code would look something like:
The field that the getAscending() method takes will also be on a methods like getStartDate(); So I'd pass in startDate. Would this mean that I would now have to pass in getStartDate? Yes.
From what I have seen in reflection examples, it would appear to me that invoke only works with methods that take in parameters, but I could totally misinterpreting it. The invoke() method allows you to use any number of parameters, including zero. The Object[] array representing the arguments can be whatever size you need it to be for the given method. In the code above, new Object[0] creates an empty array, which is your way of telling the JVM "this method has no arguments".
Enjoy...