проблема подклассов ObjectFactory в веб-сервисе - PullRequest
1 голос
/ 02 декабря 2009

В веб-сервисе jax-ws я не могу напрямую получить доступ к объекту JaxbContext. JaxbContext использует класс ObjectFactory. Я попытался расширить его (как в Jaxb Adding Behaviors ). Я поместил сгенерированный код в ObjectFactoryBase, затем добавил

public class ObjectFactory extends ObjectFactoryBase {//.. overriden methods}

Однако IllegalAnnotationsException появился при публикации в weblogic, потому что он не может найти определенный @XmlElementDecl подарок в ObjectFactoryBase. Когда я перемещаю метод с этим @XmlElementDecl на ObjectFactory, он работает.

Не повезло и с добавлением @XmlSeeAlso({ ObjectFactoryBase.class }).

Редактировать: Теперь я обнаружил, что созданная ObjectFactory даже не используется веб-службой jaxws. Так что вышеприведенное сообщение об ошибке уже не так актуально. Любая идея, почему он генерируется, но не используется?

Есть идеи?

1 Ответ

4 голосов
/ 03 декабря 2009

JAXB ObjectFactories - странные звери. У вашего вопроса много аспектов, поэтому я просто отвечу с помощью списка:

  • JAXB1 полагался на ObjectFactory для создания экземпляров связанных классов, но в JAXB2 все является POJO, и ObjectFactory становится в основном ненужным. Он все еще генерируется XJC, частично из-за обратной совместимости.
  • Аннотации в ObjectFactory сложны и неочевидны, но, поскольку это сгенерированный класс, это обычно не имеет значения, и большинство людей все равно на него не смотрят.
  • ObjectFactory по-прежнему полезен, поскольку он предоставляет фабричные методы для связанных классов, которым требуется оболочка JAXBElement, и гораздо проще использовать предоставленные фабричные методы, чем делать это вручную.
  • Веб-служба JAXWS может отказаться от использования ObjectFactory, поскольку это строго не обязательно. Однако JAXBContext может по-прежнему загружать и анализировать его в зависимости от того, как был инициализирован контекст.
  • Я никогда не пытался создать ObjectFactory самостоятельно; если модель была сгенерирована XJC, то обычно достаточно сгенерированной ObjectFactory, и если у вас есть рукописная модель JAXB, ObjectFactory, как правило, совершенно не нужен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...