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