Java CXF没有生成枚举映射?

Java CXF没有生成枚举映射?,java,web-services,enums,wsdl,cxf,Java,Web Services,Enums,Wsdl,Cxf,我用wsdl文件中的CXF(wsdl2java)生成类,但是一个枚举只映射到字符串 如果打开生成的类,这是wsdl片段: <complexType> <complexContent> <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> <attribute name="Type" use="required"> <

我用
wsdl
文件中的
CXF
(wsdl2java)生成类,但是一个枚举只映射到
字符串

如果打开生成的类,这是wsdl片段:

 <complexType>
    <complexContent>
      <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
        <attribute name="Type" use="required">
          <simpleType>
            <restriction base="{http://www.w3.org/2001/XMLSchema}string">
              <enumeration value="AAA"/>
              <enumeration value="VVV"/>
            </restriction>
          </simpleType>
        </attribute>
      </restriction>
    </complexContent>
  </complexType>
更新:自定义绑定文件:

<jaxb:bindings    
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    jaxb:version="2.1">


         <jaxb:bindings>
                <jaxb:bindings node="//xs:attribute[@name='Type']/xs:simpleType">
                 <jaxb:typesafeEnumClass ref="TestEnum" />
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

“…一个枚举只映射到字符串。”

为什么结果是字符串而不是枚举

当您的一个枚举值不是有效的Java标识符(例如:以数字开头)时,可能会发生这种情况—JAXB(cxf的
wsdl2java
委托它工作)实际上被强制使用
String
字段,否则生成的代码将无法编译


推荐阅读:

以下信息是我的实验结果。我在CXF手册中找不到任何有用的东西

  • 如果在另一个类型中声明一个类型,并且它是
    simpletype
    ,那么容器java类中没有类型,只有一个字段。如果您的限制是基于
    字符串
    ,则您将拥有
    字符串
    类型的字段
  • 如果该内部类型是
    complextype
    (必须在
    complextype
    restriction
    之间放置一个
    simplecontent
    元素),则有一个名称正确的内部类,但它不是真正的枚举。您可以通过
    getValue()
    获取字符串值。您可以为它使用任何字符串数据,并且不会得到任何错误。(IMHO,绝对无用的变体)
  • 如果将枚举声明为不带容器类型的
    complextype
    ,则它将作为公共类而不是内部类。另一方面,它与前面的一样。同样,它没有枚举,没有正确性检查,没有真正的限制。没用
  • 如果在任何容器类型之外声明枚举类型,并且它将是一个
    simpletype
    ,则您拥有一个公共非内部枚举。显然,这是你想看到的
更糟糕的是,即使是第四个变量也无法捕获XML消息中的错误。如果:

enumeration StyleType {A,B,C}
...
StyleType Style 

如果XML消息的样式值不正确(不是A、B、C中的任何一个),则使用
getStyle()
时将得到null。因此,您必须在每个gerStyle()之后添加一个NOTNULL检查,而不是有一个漂亮的消息“in…message on line…position…有不正确的数据”。如果您不想让用户获得
NullPointerException

因为您在bean类中明确提到了字符串,请更改此设置。如果您的wisdl xml文件中有一个绑定xml文件,您需要将其中的enum与所需类型的字符串绑定。您需要将字符串而不是SimpleType放入xml绑定文件中
enumeration StyleType {A,B,C}
...
StyleType Style