2013-10-09 99 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; 
}