0

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

4

1 回答 1

0

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

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

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

于 2016-01-12T20:56:48.087 回答