代码之家  ›  专栏  ›  技术社区  ›  AR3Y35

如何使用Eclipse XSD编辑器创建枚举

  •  1
  • AR3Y35  · 技术社区  · 12 年前

    我正在为WSDL中使用的常见web服务类型创建XSD。我需要的常见类型之一是枚举。

    我的问题是,当我执行wsimport时,生成的工件是一个类而不是枚举。

    我使用的是EclipseIndigo的XSD和WSDL编辑器。以下是我在设计模式下创建枚举的操作:

    1. 创建新的复杂类型(ResponseCodeType)
    2. 在ResponseCodeType中添加新的字符串元素(代码)
    3. 在代码的constraints属性中,我添加了以下约束值:SUCCESS、WARNING、ERROR、FATAL

    我做错了什么?

    XSD源

    <complexType name="ResponseCodeType">
        <sequence>
            <element name="code">
                <simpleType>
                    <restriction base="string">
                        <enumeration value="SUCCESS"></enumeration>
                        <enumeration value="WARNING"></enumeration>
                        <enumeration value="ERROR"></enumeration>
                        <enumeration value="FATAL"></enumeration>
                    </restriction>
                </simpleType>
            </element>
        </sequence>
    </complexType>
    

    wsimport生成的工件的Java源代码

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "ResponseCodeType", propOrder = {
        "code"
    })
    public class ResponseCodeType {
    
        @XmlElement(required = true)
        protected String code;
    
        /**
         * Gets the value of the code property.
         * 
         * @return
         *     possible object is
         *     {@link String }
         *     
         */
        public String getCode() {
            return code;
        }
    
        /**
         * Sets the value of the code property.
         * 
         * @param value
         *     allowed object is
         *     {@link String }
         *     
         */
        public void setCode(String value) {
            this.code = value;
        }
    
    }
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   AR3Y35    12 年前

    我想明白了。当我尝试设计枚举时,我创建了一个复杂的类型,其中包含一个具有所需约束的元素(SUCCESS、INFO、WARN等)。

    相反,我所做的是创建一个简单的类型,其中包含一个具有约束的字符串元素(ResponseCode)。然后,我用ResponseCode元素创建了一个复杂类型(ResponseCodeType)。

    当我执行wsimport时,它生成了作为枚举的ResponseCode和具有ResponseCode属性的ResponceCodeType类。

    如果有人有更好的方法,请发表评论或提供更好的答案。