Добавьте аргументы в обработчик RouterNanoHTTPD - PullRequest
0 голосов
/ 01 мая 2018

Я использую NanoHTTPD RouterNanoHTTPD, чтобы добавить сопоставления маршрутов.

Вызов addRoute(String uri, Class<?> handler, Object ... params) не вызывает параметризованный конструктор для создания экземпляра объекта Class<?> handler. Кто-нибудь смог это сделать?

Проблема точно такая же, как и в этом выпуске Github NanoHTTPD .

public class SoapServer extends RouterNanoHTTPD {

    @Override
    public void addMappings() {
        super.addMappings();

        // works fine when there are no parameters passed
        addRoute("/onvif/device_service", DeviceServiceHandler.class);

        // MediaServiceHandler instantiated with empty constructor;
        // it doesn't create the class with these arguments in the constructor
        addRoute("/onvif/media_service", MediaServiceHandler.class,
            systemServices, userRepository, authenticators);
}

1 Ответ

0 голосов
/ 02 мая 2018

Был в состоянии сделать это путем клонирования и изменения части библиотеки, в которой происходит создание объекта.

Вместо

Object object = handler.newInstance();

Я переписал эту часть:

Constructor<?> constructor = handler.getDeclaredConstructors()[0];
constructor.setAccessible(true);
Object object = constructor.newInstance(initParameter);

Теперь это вызывает параматеризованный конструктор. Пометить как решенное на данный момент, но не уверен, что это правильный путь или создатели библиотеки специально не хотели, чтобы это было сделано так.

...