Есть ли способ использовать интерфейсы с сервисами RESTful Jersey без аннотаций JAX-WS в интерфейсах, ссылающихся на реализации? - PullRequest
4 голосов
/ 04 марта 2011

Мне нравится Джерси, правда, но я бы предпочел использовать интерфейсы в качестве типов возврата для моих ресурсов вместо конкретных классов.Я следовал приведенным здесь инструкциям:

http://jaxb.java.net/guide/Mapping_interfaces.html

В нем показано, как можно аннотировать интерфейс с помощью адаптера для классов, реализующих интерфейсы, чтобы JAXB мог связываться с ними.

Со страницы:

@XmlJavaTypeAdapter(AbstractFooImpl.Adapter.class)
interface IFoo {
  ...
}

abstract class AbstractFooImpl implements IFoo {
  ...

  static class Adapter extends XmlAdapter<AbstractFooImpl,IFoo> {
     IFoo unmarshal(AbstractFooImpl v) { return v; }
     AbstractFooImpl marshal(IFoo v) { return (AbstractFooImpl)v; }
  } 
}

Я не слишком без ума от интерфейса, который знает, что его реализует, это выглядит довольно некрасиво.Наш код использует шаблон DAO с фабрикой для абстрагирования базы данных, которую мы используем, так что мы можем поменять ее позже, если потребуется.Такая циклическая зависимость, похоже, создаст проблемы позже.

Я также недоволен тем, что не могу использовать эти интерфейсы с моим клиентом GWT, который будет использовать эти веб-сервисы.Поскольку аннотация взята из javax.xml.bind, она не совместима с компилятором GWT.Мой текущий обходной путь - это специальный сервисный интерфейс с аннотациями.

Так есть ли лучший способ сделать это?Может быть, с помощью провайдера для создания экземпляров классов?Или какой-то тип фильтра, который может сопоставить интерфейсы с фабрикой, которая может обеспечить реализацию?

Любая помощь будет оценена.

Спасибо.

1 Ответ

1 голос
/ 04 марта 2011

EclipseLink JAXB (MOXy) предлагает поддержку интерфейсов отображения (я технический руководитель):

МОКСИ может быть легко использован с Джерси:

...