Сериализация исключений ANTLR для GWT RPC - PullRequest
0 голосов
/ 22 августа 2011

Я использую GWT-RPC для вызова грамматики ANTLR. Если грамматика не работает, я создаю объект, содержащий ошибки / исключения, которые были сгенерированы грамматикой, и возвращаю его клиенту.

Когда я делаю это, я получаю исключение:

com.google.gwt.user.client.rpc.SerializationException: Type 'org.antlr.runtime.NoViableAltException' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded.

Я обнаружил, что в com.google.appengine.repackaged.org.antlr.runtime есть идентичный класс с добавлением общедоступного конструктора без аргументов (необходим для сериализации GWT-RPC). пакет.

Как преобразовать org.antlr.runtime.NoViableAltException в com.google.appengine.repackaged.org.antlr.runtime.NoViableAltException ?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Вам нужны сами исключения? Я думаю, нет - вам, вероятно, нужно сообщение или, самое большее, трассировка стека Поскольку вы все равно перепаковываете исключения, просто упакуйте нужные строки и отправьте их по проводам.

0 голосов
/ 22 августа 2011

В качестве альтернативы для создания новых исключений, которые можно сериализовать, я заставил свой Parser переопределить метод emitErrorMessage из BaseRecognizer.

@members {
    @Override
    public void emitErrorMessage(String msg) {
        // The original prints to stdout.
        // You can do what you like with the message.
    }
}

Как предложил Тассос в своем ответе, яна самом деле не нужно исключение, просто сообщение от него.

...