JAX-RS по отношению к Джерси и JSRs
Я пытаюсь разобраться в некоторых концепциях Java:
- JSR (s): описывают спецификации, но не содержат фактических реализаций. Е. Г. http://jsr311.java.net/ является "домашним" для "API-интерфейса Java™ для веб-служб RESTful". Он служит общей ссылкой для всех реализаций JSR-311.
- можно скачать интерфейсы (?) JSR-311 из http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api , однако, если вы не реализуете JSR-311 с помощью сами они особой ценности не имеют?
- JSR (s) обычно/всегда будет иметь ссылочную реализацию. Чтобы найти его, вам придется поискать в google "JSR XXX reference implementation" или посмотреть домашнюю страницу спецификаций (например, http://jsr311.java.net/)
- для JSR-311 эта ссылочная реализация являетсяДжерси . Используя maven, вы можете получить сервер Джерси из http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 . так как Джерси обеспечивает реализацию согласно интерфейсам, найденным в http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api , Вам нужно только добавить Джерси в качестве зависимости в вашем проекте, а не сам jsr311-api. (это относится ко всем технологиям JSR?)
- положить оба http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api и http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 поскольку зависимости в вашем проекте, возможно, вызовут classpath проблемы?
Я полностью отключился или на что-то наткнулся?
2 ответа:
Да, в этом нет ничего нового. Подумайте о JDBC, java предоставляет интерфейсы (
Connection
,Statement
,ResultSet
и т. д.), Но это вверх поставщикам баз данных для предоставления реализаций.Если вы используете реализацию JSR-311, такую как Jersey или Apache CXF затем вы будете аннотировать свои классы с помощью аннотаций
javax.ws.rs
, таких как@Path
,@GET
,@Produces
и т.д. Вот почему вам нужно явно иметь JSR-311 в качестве зависимости maven.Да, обычно. Взгляните на эту картину. список JSR на wiki .
Вам нужны как JSR, так и реализация. Аннотации находятся в JSR, реализация предоставляет вспомогательные классы, такие как
com.sun.jersey.spi.container.servlet.ServletContainer
.Нет, необходимо иметь обе зависимости (см. пункт 4); Вы не получите конфликтов путей к классам.
В остальном вы правы.
- -
- можно загружать файлы из различных источников. Чтобы получитьсамую официальную версию спецификацииJSR-311 , перейдите на страницу загрузкиJCP . Вполне возможно, что вы не можете получить файл JAR (со всеми интерфейсами и прочим) со страниц JCP, но все же это официальный источник. (Всегда есть хорошие PDF-файлы публичных проектов!)
- -
- Вы правы, потому что Джерси содержит API, определенный JSR-311, однако я бы добавил в компиляции зависимость к jsr311-АПИ jar-файл и добавить Джерси, как во время выполнения зависимость. Это создает хорошее разделение между API и реализацией, и вы можете поменять свою реализацию JSR-311 в любое время [sic]. Если вы собираетесь использовать Джерси Полностью, Включите только Джерси. Одной зависимостью меньше в вашем пом.
- Если Джерси упаковывает тот же API, что и JSR311-api JAR, он не будет. если он упаковывает что-то другое, Ну, это будет ужасно! Maven, вероятно, будет лаять во время компиляции, если у вас есть поврежденный API JSR-311 на его пути к классу (я уже видел много java.яз..ClassFormatError: отсутствует атрибут кода в методе that ... ошибки, так что это не останется незамеченным, это точно).