понедельник, 7 сентября 2009 г.

Использование нескольких Namespace вебсервисов на одной модели (eRoom 6-7)

Проблема: Необходимо использовать один из двух Namespace в JAXBContext с одним и тем же наборов классов, генерированных с помощью XJC по одной схеме (Schema).
Технологии: Metro: JAXB, JAX-WS.
Комментарий: Реально Схемы eRoom 6-7 версий отличаются, но на уровне кода это можно будет решить.
Решение:
Генерируем классы по одной из схем (eRoom 7) с помощью утилиты XJC.
В коде клиента:
Создаем JAXBContext по полученному ObjectFactory и с следующими свойствами: JAXBRIContext.DEFAULT_NAMESPACE_REMAP и JAXBRIContext.ANNOTATION_READER. Где ANNOTATION_READER будет переопределять Namespace, т.к. первого свойства недостаточного (исходящие конверты создаются "правильно", а вот входящий обрабатывается только тэг сервиса).
Service также создаем с необходимым Namespace.