Мне нравится Джерси, правда, но я бы предпочел использовать интерфейсы в качестве типов возврата для моих ресурсов вместо конкретных классов.Я следовал приведенным здесь инструкциям:
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.Мой текущий обходной путь - это специальный сервисный интерфейс с аннотациями.
Так есть ли лучший способ сделать это?Может быть, с помощью провайдера для создания экземпляров классов?Или какой-то тип фильтра, который может сопоставить интерфейсы с фабрикой, которая может обеспечить реализацию?
Любая помощь будет оценена.
Спасибо.