RESTLET — цепочка валидатора и фильтра, почему превосходит фильтр?

У меня есть рестлет, в котором я хочу связать валидатор и фильтровать один за другим в коде. Код выглядит примерно так

@Override
public synchronized Restlet createInboundRoot()
{
    Router router = new Router();
    Validator val = new ParameterValidator(getContext());

    Filter fil = new MYFilter(getContext());
    router.attach("/HelloWorld", HW.class);
    fil.setNext(val);
    val.setNext(router);
    val.validate("Name",true,"^[a-z0-9A-Z]+$");
    return val;
}

но это не проверяет фильтр, просто работает на валидаторе, а затем выходит.

Но если я напишу тот же код, что и ниже, он отлично работает,

@Override
public synchronized Restlet createInboundRoot()
{
    Router router = new Router();
    Validator val = new ParameterValidator(getContext());

    Filter fil = new MYFilter(getContext());
    router.attach("/HelloWorld", fil);
    fil.setNext(val);
    val.setNext(HW.class);
    val.validate("Name",true,"^[a-z0-9A-Z]+$");
    return router;
}

Приведенный выше код работает нормально, но теперь, если мне нужно создать цепочку, мне придется создавать новые объекты Validator и Filter с каждым новым сопоставлением. Любое решение будет оценено


person saurabh.vatsa    schedule 11.03.2014    source источник


Ответы (1)


Я нашел ответ на вышеуказанный вопрос в списке рассылки RESTLET. Причина, по которой маршрутизатор превосходит фильтр, заключается в том, что он возвращает val

return val;

а не это, если использовать

return fil;

тогда вызов будет проходить через цепочку фильтров, проходящую через фильтр, затем валидатор..

person saurabh.vatsa    schedule 12.03.2014