2015-09-14 5 views
0

Наши сервисы используют WSDL, с большим один размер подходит для всех схем со сложными вложенными структурами, IDREFS, импорт схемы и т.д.Скажите JAXB привязки компилятор, какие элементы включают в себя

Поэтому никакой сервис никогда не будет использовать все элементы, описанные в схемы. Реальные службы используют только относительно небольшое подмножество схемы. Генерация JAXB-компонентов из схемы создает громоздкие объекты со многими атрибутами, которые в основном не используются.

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

Однако структура схемы и ответ xml достаточно сложны, чтобы заставить меня пожелать, чтобы я мог генерировать компоненты JAXB и как-то сказать xjc, какие элементы он должен включать.

Возможно ли это? Есть ли плагин xjc, который делает это? Или существует ли реализация JAXB, отличная от RI, которая может это сделать?

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

ответ

0

Я нашел sample XJC plugin, который делает что-то очень похожее, он позволяет подавлять типы на уровне пакета и управлять классами и свойствами, как показано ниже.

<jxb:bindings schemaLocation="Person.xsd"> 
    <tpi:package removeClass="com.captech.person.Extra"/> 
    <jxb:bindings node="//xs:complexType[@name='Name']"> 
     <tpi:class getLastName="public synchronized" 
        setFirstName="public synchronized"/> 
     <tpi:class setLastName="public synchronized"/> 
     <jxb:bindings node=".//xs:element[@name='FirstName']"> 
      <tpi:property modifiers="private"/> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

В блоге статья также наиболее полезная, поскольку он показывает, как отлаживать пользовательские XJC плагина - эта информация была в Nabble ранее, но ссылка на странице JAXB2 сломана в настоящее время.

+0

FWIW, вот проект плагина xjc: https://github.com/dschulten/jaxb2-tolerant-reader-plugin – dschulten

1

Насколько я знаю, в XJC нет встроенного механизма включения/исключения элементов. Есть, однако, несколько трюков, которые вы можете использовать:

  • Создайте дополнительную схему, которая импортирует вашу схему и определит несколько элементов, которые ссылаются только на те элементы/типы, которые вам нужны. Затем скомпилируйте только вашу схему. XJC (вероятно) просто скомпилирует необходимые вещи. Но я не уверен.
  • Попробуйте jaxb:class/@ref привязки для подавления генерации ненужных классов.
  • (Hardcore level.) Плагин XJC может манипулировать моделью и удалять из нее информацию о classe или информацию о свойствах.

Насколько я знаю, нет другого компилятора схемы для JAXB, а не XJC.

+0

Спасибо, я попробую ваши предложения. Кажется, есть, по крайней мере, Moxy, но, похоже, он не делает то, что я хочу: http://www.eclipse.org/eclipselink/documentation/2.4/moxy/toc.htm – dschulten

+0

Заглядывая в Moxy, у них есть xpath based bean mapping, что может оказаться полезным для толерантного читателя на основе xpath. Однако это не то, что я получаю после банкомата. http://www.eclipse.org/eclipselink/documentation/2.6/moxy/advanced_concepts005.htm#CHDBFCAA – dschulten

+0

Первое предложение не работает - все импорт разрешен и скомпилирован xjc. – dschulten

 Смежные вопросы

  • Нет связанных вопросов^_^