2013-10-09 101 views
2

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

我需要省略枚举值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> 
+0

如果'NONE'不是一个有效的价值,为什么模型呢?也许你可以使用'null'来表示没有标题值? – MattR

+0

这只是一个例子。你可以假设另一个枚举类似“@XmlEnumValue(”cat“)CAT,@XmlEnumValue(”dog“)DOG,OTHER;” – mzy

回答

2

您应该可以使用XmlAdapter。让它在你的枚举和一个enum之间进行转换。

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; 
}