CXF生成字符串而不是枚举

时间:2016-01-12 20:20:44

标签: java jaxb cxf xjc cxf-xjc-plugin

我有一个像这样的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”类中引用它。通常这正是你想要的。

但是在我的情况下,我不能使用枚举,因为我受限于以后使用生成的Java代码的方式。所以我希望CXF生成字符串而不是枚举。因此,它只是将其他对象中此类型的所有出现映射到字符串。 在我的例子中,而不是:

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

我想:

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

我怎样才能做到这一点? 我不想在不编写自己的自定义jaxb插件的情况下更喜欢这样做。

1 个答案:

答案 0 :(得分:0)

我找到了一种欺骗自己的方法。 有一个配置,您可以在其中设置一个值,枚举的最长参数名称是多少。如果枚举包含超过此值的值,则CXF将生成字符串而不是枚举。

我只是将此值设置为1,以便每个枚举都大于限制。

这里有关于如何设置值的说明: https://stackoverflow.com/a/12779608/1448704