3

と を使用@XmlEnumして@XmlEnumValue、列挙型を XML 表現 (WSDL ファイル) にマッピングします。列挙値の 1 つを省略する必要があります。したがって、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>
4

1 に答える 1

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;
}
于 2015-03-25T23:51:49.380 に答える