如何禁止枚举类型中的枚举值到XML表示映射?

时间:2013-10-09 20:19:08

标签: java xml java-ee jaxb wsdl

我使用@XmlEnum@XmlEnumValue将枚举映射到XML表示(WSDL文件)。我需要省略其中一个枚举值。所以它不会成为WSDL文件的一部分。

我需要省略枚举值NONE。试过这个,但没有用。

@XmlEnum
public enum Title { 
   @XmlEnumValue("mrs") MRS,
   @XmlEnumValue("mrs") MR,
   NONE;
   ..
}

这是生成的WSDL文件。

<xs:simpleType name="title">
  <xs:restriction base="xs:string">
    <xs:enumeration value="mrs"/>    
    <xs:enumeration value="mr"/>
    <xs:enumeration value="NONE"/> <!-- I need to get rid of this enum value -->
  </xs:restriction>
</xs:simpleType>

1 个答案:

答案 0 :(得分:2)

您应该可以使用XmlAdapter。让它在您的枚举和枚举之间转换所需的项目。

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class TitleAdapter extends XmlAdapter<TitleAdapter.AdaptedTitle, Title>{

    @XmlType(name="title")
    public enum AdaptedTitle {
        @XmlEnumValue("mrs") MRS,
        @XmlEnumValue("mrs") MR
    }

    @Override
    public Title unmarshal(AdaptedTitle v) throws Exception {
        switch(v) {
        case MRS:
            return Title.MRS;
        case MR:
            return Title.MR;
        }
        return null;
    }

    @Override
    public AdaptedTitle marshal(Title v) throws Exception {
        switch(v) {
        case MRS:
            return AdaptedTitle.MRS;
        case MR:
            return AdaptedTitle.MR;
        }
        return null;
    }

}

然后将您的Title枚举更改为:

import javax.xml.bind.annotation.adapters.*;

@XmlJavaTypeAdapter(TitleAdapter.class)
public enum Title { 
   MRS,
   MR,
   NONE;
}