Проблема сериализации (?) Пользовательского AsyncCallback - PullRequest
0 голосов
/ 04 января 2011

Я реализовал собственный Marshalling / Unmarshalling Sytem с JMS (упражнение).Я делаю запрос и получаю ответы обратно.Я хочу запустить собственный обратный вызов в ответ после получения правильного ответа.Но я думаю, что мое исключение - проблема сериализации.Но я не знаю, как это исправить.

Я использую этот код для вызова сервера

button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            Request request = new Request("printServer:" + printMessage.getText());
            request.setAsyncCallback(new AsyncCallback() {

                /**
                 * 
                 */
                private static final long serialVersionUID = 5204649755139243369L;

                @Override
                public void onSuccess(String content) {
                    System.out.println("async callback: " + content);

                }
            });
            c.callServer(request);

        }
    });

Мой запрос выглядит так:

public class Request extendsConveyable {private static final long serialVersionUID = 4535036450648916878L;

public static int requestIDInc = 0;

private int requestID;

private AsyncCallback callback;

public Request(String content)
{
    super(content);
    synchronized (this) {
        requestID = ++requestIDInc;
    }   
}

public int getRequestID() {
    return requestID;


}

public AsyncCallback getAsyncCallback() {
    // TODO Auto-generated method stub
    return callback;
}

public void setAsyncCallback(AsyncCallback callback)
{
    this.callback = callback;
}

}

Мой собственный обратный вызов выглядит так:

public abstract class AsyncCallback implements Serializable{
/**
 * 
 */
private static final long serialVersionUID = 4951246599084406476L;

public abstract void onSuccess(String content);

}

ИИсключение, которое я получил, это:

javax.jms.MessageFormatException: machines.client.ClientWindow$1
at org.exolab.jms.message.ObjectMessageImpl.setObject(ObjectMessageImpl.java:194)

Это выглядит так, как будто ClientWindow, в котором создается запрос и запускается с помощью buttonClick, включен в этот обратный вызов.Но я не знаю почему.Или, может быть, проблема не в этом.

1 Ответ

1 голос
/ 15 февраля 2011

Ваш подкласс AsyncCallback создается как внутренний класс в ClientWindow. Нестатические внутренние классы содержат ссылку на родительский класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...