JAX-RS по отношению к Джерси и JSR - PullRequest
11 голосов
/ 12 декабря 2011

Я пытаюсь разобраться с некоторыми понятиями в Java:

  1. JSR: описать спецификации, но не иметь реальных реализаций. Например. http://jsr311.java.net/ является «домом» для «API Java ™ для веб-служб RESTful». Он служит общей ссылкой для всех реализаций JSR-311.
  2. Можно загрузить интерфейсы (?) JSR-311 из http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api, однако, если вы сами не реализуете JSR-311, у них нет особого значения?
  3. JSR (ы) обычно / всегда имеют эталонную реализацию. Чтобы найти его, вам нужно зайти в Google «Справочная реализация JSR XXX» или посмотреть домашнюю страницу спецификаций (например, http://jsr311.java.net/)
  4. Для JSR-311 эта эталонная реализация: Джерси . Используя maven, вы можете получить сервер Джерси из http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9., так как Jersey предоставляет реализацию в соответствии с интерфейсами, найденными в http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api,, вам нужно только добавить Jersey в качестве зависимости в вашем проекте, а не сам jsr311-api. (это относится ко всем технологиям JSR?)
  5. Помещение http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api и http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 в качестве зависимостей в вашем проекте может вызвать проблемы с classpath?

Я совсем не в курсе или на что-то?

Ответы [ 2 ]

8 голосов
/ 12 декабря 2011
  1. Да, в этом нет ничего нового.Подумайте о JDBC, java предоставляет интерфейсы (Connection, Statement, ResultSet и т. Д.), Но поставщики баз данных должны предоставить реализации.

  2. Если вы используетереализация JSR-311, такая как Jersey или Apache CXF, тогда вы будете аннотировать свои классы аннотациями javax.ws.rs, такими как @Path, @GET, @Produces и т. д. Вот почему вам нужно явно иметь JSR-311как зависимость мавена.

  3. Да, обычно.Взгляните на список JSR в вики .

  4. Вам нужны и JSR, и реализация.Аннотации находятся в JSR, реализация предоставляет вспомогательные классы, такие как com.sun.jersey.spi.container.servlet.ServletContainer.

  5. Нет, необходимо иметь оба в качестве зависимостей (см. Пункт 4);вы не получите конфликты классов.

3 голосов
/ 12 декабря 2011
  1. -
  2. Можно загружать файлы из разных источников. Чтобы получить наиболее официальную версию спецификации JSR-311 , перейдите на страницу JCP . Вполне возможно, что вы не можете получить JAR-файл (со всеми интерфейсами и прочим) со страниц JCP, но, тем не менее, это официальный источник. (Всегда есть хорошие PDF-файлы общественных проектов!)
  3. -
  4. Вы правы, потому что на Джерси есть API, определенный в JSR-311, однако я бы добавил компиляцию зависимости в файл JAR jsr311-api и добавил Джерси как время выполнения зависимость. Это создает хорошее разделение между API и реализацией, и вы можете поменять свою реализацию JSR-311 в любое время [ sic ]. Если вы намерены использовать Джерси полностью, включите только Джерси. Еще одна зависимость в вашем POM.
  5. Если Jersey упаковывает тот же API, что и JAR jsr311-api, он не будет. Если это упаковывает что-то другое, хорошо, это было бы ужасно! Maven, вероятно, будет лаять во время компиляции, если у него есть поврежденный JSR-311 API на его пути к классам (я уже видел много java.lang.ClassFormatError: отсутствует атрибут кода в методе, который .. . ошибок, так что не останется незамеченным, это точно).

Кроме этого, вы правы.

...