Несмотря на то, как утверждают here:TomEE 1.5.2 @Path аннотацию на уровне интерфейса до сих пор не работает
для приложений, которые не работают из-за недостающего @Path на уровне класса -> он должен теперь работать
Мне до сих пор приходится комментировать мои конечные реализации, поскольку аннотации на интерфейсах не собираются.
Связано ли это с тем, как я настраиваю JAX-RS, или это ошибка, присутствующая в TomEE?
интерфейс:
@Path("myPath") public interface MyEndpoint {
@Path("{id}") String getById(@PathParam("id") long id);
}
реализация:
@Stateless class EJBBackedMyEndpoint implements MyEndpoint {
String getById(long id) { return "foo"; }
}
OpenEJB-jar.xml
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
<ejb-deployment ejb-name="EJBBackedMyEndpoint">
<properties>cxf.jaxrs.providers = exceptionMapper</properties>
</ejb-deployment>
</openejb-jar>
resources.xml
<resources>
<Service id="exceptionMapper" class-name="package.MyExceptionMapper"/>
</resources>
beans.xml присутствует только с пустым корневым элементом
Update:
- JAX-RS Spec, по-видимому, не говоря уже о аннотациях уровня класса на всех
- @Consumes и @Produces работе, когда применяется на интерфейсе,
- @Path (уровень класса) не работает, если применяется к интерфейсу,
- @Path на уровне метода соблюдается при запросах маршрутизации, однако UriBuilder не работает ing:
UriBuilder.path(EJBBackedMyEndpoint.class, "getById")
throwsIllegalArgumentException: No Path annotation for 'retrieve' method
.
Я помню, что это сработало для меня, когда я использовал простой CXF. Не могли бы вы указать мне на соответствующую часть спецификации? –
Похоже, я ошибаюсь, по крайней мере, в части ответа. Раздел «3.6 Наследование аннотаций» JAX-RS 1.1 говорит, что вы определенно можете добавлять аннотации к методу интерфейса. В нем упоминаются только методы, а в примере spec все еще есть аннотация @bot в классе bean. Я прошел через TCK (набор тестов совместимости), и есть тесты, которые имеют интерфейсы с аннотированными методами, но никаких тестов с интерфейсом с использованием аннотаций вне методов. Мы передаем TCK для JAXRS, чтобы это работало. Но не кажется, что аннотации к не-методам интерфейса покрываются спецификацией или TCK. –
После тщательного чтения я думаю, что в разделе 3.6 не упоминаются аннотации уровня класса. Тем не менее, я думаю, что CXF позволяет это, поэтому, возможно, я был просто неаккуратен и оставил некоторые другие комментарии к классу. –