Генерация класса JAX-B из составной схемы из нескольких файлов - PullRequest
2 голосов
/ 29 февраля 2012

Я использую JAX-b для генерации классов из схемы XSD (составной по нескольким файлам, и я не знаю, является ли это проблемой), и результат не тот, который я ожидал. Созданные объекты не предоставляют геттеры для отдельных атрибутов, но они предлагают геттер для списка атрибутов как Object , и я должен привести каждый объект вручную.

т.е. файл lom.xsd имеет:

  <xs:include schemaLocation="common/elementTypes.xsd"/>
  <xs:include schemaLocation="common/rootElement.xsd"/>

в файле elementTypes.xsd имеем:

    <xs:complexType name="lom">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:group ref="general"/>
         <xs:group ref="lifeCycle"/>
       </xs:choice>
      </xs:complexType>

вместо этого в rootElement.xsd у нас есть

     <xs:element name="lom" type="lom">
       <xs:unique name="lomUnique">
         <xs:selector xpath="*"/>
         <xs:field xpath="@uniqueElementName"/>
      </xs:unique>
     </xs:element>

Что я получаю, так это класс:

 public class General{
      List<Object> titleOrlifeCicle
 }

и я бы притворился:

   public class General{
     String title;
     String lifeCicle
   }

В другой схеме он работает нормально, но, похоже, со схемой в разных файлах это не сильно помогает. Есть ли способ получить вторую версию из схемы? Спасибо.

1 Ответ

1 голос
/ 01 марта 2012

Надо быть уверенным в том, что правильное наличие одного и того же контента в многочисленных XSD против нескольких не изменит результат вашего процесса генерации.Проблема в вашем случае заключается в том, что ваша схема интенсивно использует xsd: choice, отсюда и имена ваших получателей.Выбор неограничен, вы получаете список;Вы можете сделать имена более дружелюбными, используя пользовательские привязки, но это не изменит основную структуру.В вашем случае вам придется перемещаться по объектам в списке, попробуйте посмотреть, соответствуют ли они классу «General» или «LifeCycle», в котором будут строки, которые вы ищете для нужных вам атрибутов (см. Схемуниже).

LOM.xsd

...