CXF для генерации строк вместо перечислений

У меня есть, например, конструкция определения WSDL, как это:

     <xsd:simpleType name="MyDayType">
        <xsd:restriction base="xsd:string">
           <xsd:enumeration value="Sat"/>
           <xsd:enumeration value="Wed"/>
        </xsd:restriction>
     </xsd:simpleType>

И тогда у вас есть другой объект, например:

     <xsd:complexType name="MyEntity">
        <xsd:sequence>
           <xsd:element name="dayType" type="v:MyDayType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
     </xsd:complexType>

Теперь, если я использую плагин cxf-codegen-plugin, он сгенерирует перечисление "MyDayType" и ссылается на него в классе "MyEntity". Обычно это именно то, что вы хотите.

Однако в моем случае я не могу использовать enum, так как я ограничен в способе использования сгенерированного Java-кода позже. Поэтому я хотел бы, чтобы CXF генерировал строки вместо перечислений. Таким образом, он просто отображает все вхождения этого типа в других объектах в строку. В моем примере вместо:

public class MyEntity {
  protected List<MyEntity> dayType;
  /** Getters(/Setters) **/
}

Я бы хотел:

public class MyEntity {
  protected List<String> dayType;
  /** Getters(/Setters) **/
}

Как мне этого добиться? Я бы предпочел какой-то способ сделать это без написания собственного плагина jaxb.

1 ответ

Я нашел способ обмануть себя до того, что я хочу. Существует конфиг, в котором вы можете установить значение, сколько будет самое длинное имя параметра для перечисления. Если перечисление содержит значения, которые превышают это значение, CXF будет генерировать строки вместо перечислений.

Я просто устанавливаю это значение на 1, чтобы каждое перечисление превышало предел.

Существует описание того, как установить значение здесь: /questions/21017560/sozdavajte-klassyi-java-s-jaxb/21017570#21017570

Другие вопросы по тегам