Как реализовать самоанализ в серверных приложениях Apache XML-RPC? - PullRequest
0 голосов
/ 01 сентября 2011

У нас есть серверная часть Java, которая использует Apache XML-RPC , чтобы сделать свои сервисы доступными для приложений PHP (не спрашивайте меня, он уже был построен таким образом, когда я приехал), и пожелал, чтобы он придерживался неофициальной спецификации самоанализа XML-RPC . Теоретически Apache XML-RPC поддерживает это, но пример , приведенный на их странице :

public class MyXmlRpcServlet extends XmlRpcServlet {
    protected XmlRpcHandlerMapping newXmlRpcHandlerMapping()
        throws XmlRpcException {
        PropertyHandlerMapping mapping =
            (PropertyHandlerMapping) newXmlRpcHandlerMapping();
        XmlRpcSystemImpl.addSystemHandler(mapping);
    }
}

не скомпилируется. В нем явно отсутствует оператор return, и я попытался вернуть созданное «отображение», но затем при первом запросе сервер (рекурсивно?) Повторяет вызов newXmlRpcHandlerMapping() до выдачи java.lang.StackOverflowError.

Вопрос: Кто-нибудь знает, как добавить интроспекцию в такое приложение? Либо исправление этого примера, либо предоставление рабочего было бы здорово. на самом деле не обязательно должно быть этой спецификацией (все, что позволило бы нам генерировать список методов и их параметров, было бы неплохо), но это, кажется, классный стандарт (в противном случае крутой мир XML-RPC. :-))

Спасибо!

1 Ответ

1 голос
/ 01 сентября 2011

Благодаря совету коллеги я получил ответ: переопределенный метод вызывает сам себя, а не версию суперкласса.Вот фиксированный код:

public class MyXmlRpcServlet extends XmlRpcServlet {
    @Override
    protected XmlRpcHandlerMapping newXmlRpcHandlerMapping()
        throws XmlRpcException {
        PropertyHandlerMapping mapping = (PropertyHandlerMapping) super
            .newXmlRpcHandlerMapping();
        XmlRpcSystemImpl.addSystemHandler(mapping);
        return mapping;
}
}

Как только вы добавите это и замените XmlRpcServlet в вашем web.xml на эту версию, вы можете вызывать методы самоанализа!

...