Почему методы ресурсов REST не могут иметь модификатор final при использовании JAX-RS?

Мы используем CXF 2.4.2 для создания интерфейса RESTful. У меня есть класс ресурсов bean-компонента, который определяется следующим образом:

@Path("/mypath")
public class MyResource {

    @GET
    @Path("/myget")
    public final Response myGet() { ... }

Кто-нибудь знает, почему метод не может быть окончательным для доступа к ресурсу?


person superdave    schedule 19.01.2012    source источник
comment
Я добавил окончательный модификатор к методу, аннотированному на Джерси, и он работает, как и раньше. Что-то о CXF может быть?   -  person Urs Reupke    schedule 19.01.2012


Ответы (1)


Иногда JAX-RS реализован таким образом, что вместо исходного класса (который мы создаем) JAX-RS использует прокси-класс, который наследуется от нашего класса. Поскольку метод final не может быть переопределен, использование методов final запрещено.

Использование прокси позволяет добавлять в структуру JAX-RS различные перехватчики, провайдеры и т. д. Очевидно, что ту же функциональность можно получить и без использования прокси, поэтому другие провайдеры могут разрешать использование финальных методов.

Спецификация ничего не говорит о конечных методах.

Примечание: очень часто использование метода final является плохой идеей. Иногда, даже если мы считаем, что данный метод не следует переопределять, может оказаться, что это необходимо. Даже создатели Java сделали несколько таких ошибок. Очевидно, что есть классы, методы которых не следует переопределять (String), но их немного.

person Piotr Kochański    schedule 10.04.2012