Я использую RMI, чтобы разрешить доступ к моему Java-приложению через MATLAB, который работает в другой JVM.MATLAB имеет приятный интерфейс для печати методов Java-объекта.Но с RMI это не удается, потому что объект, который он получает, является прокси.
Поэтому я хотел бы добавить свой собственный метод для извлечения / печати возможности удаленного интерфейса (RMI, очевидно,прямой доступ к методам, недоступным в экспортированных удаленных интерфейсах).
Как я могу сделать это с отражением, либо на стороне клиента соединения RMI, либо на стороне сервера?У меня нет большого опыта использования отражения.Пример использования ниже.
edit: что я больше всего застрял на при произвольном объекте X (включая где X - прокси RMI), как я могу использовать отражениеполучить интерфейсы, реализованные этим объектом?
Java-классы:
/** client-side remote describer */
class RemoteDescriber
{
RemoteDescription describe(Remote remote) { ... }
}
/* representation of remote interfaces implemented by an object */
class RemoteDescription implements Serializable
{
/* string representation of remote interfaces implemented by an object */
@Override public String toString() { ... }
/* maybe there are other methods permitting object-model-style navigation
* of a remote interface
*/
}
interface FooRemote extends Remote
{
/* some sample methods */
public int getValue() throws RemoteException;
public void setValue(int x) throws RemoteException;
public void doSomethingSpecial() throws RemoteException;
/* other methods omitted */
/** server-side */
public RemoteDescription describe() throws RemoteException;
}
и пример сеанса клиента в MATLAB
x = ...; % get something that implements FooRemote
describer = com.example.RemoteDescriber;
% describer is a client-side Java object
description1 = describer.describe(x)
%%% prints a description of the FooRemote interface
%%% obtained by the client-side RemoteDescriber
description2 = x.describe()
%%% prints a description of the FooRemote interface
%%% obtained on the server-side by x itself, and marshalled
%%% to the client