【问题标题】:CXF to generate strings instead of enumsCXF 生成字符串而不是枚举
【发布时间】:2016-01-12 20:20:43
【问题描述】:

例如,我有一个这样的 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 插件。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2022-01-12
      相关资源
      最近更新 更多