2011-07-29 4 views
2

私はクラスがタイプセーフ列挙型を実装するために使用するいくつかの古いコード(前のJava 1.5)を持って、何かのように:カスタムクラスをJAX-WSパラメータとして使用する:型安全なenumのJAXBアダプタを作成するには?

public class MyTypeSafeEnum implements java.io.Serializable { 
    private final int value; 

    private MyTypeSafeEnum(int value) { 
    this.value = value 
    } 

    public static final MyTypeSafeEnum FIRST_VALUE = new MyTypeSafeEnum(0) 
    public static final MyTypeSafeEnum SECOND_VALUE = new MyTypeSafeEnum(1) 
    public static final MyTypeSafeEnum THIRD_VALUE = new MyTypeSafeEnum(2) 

    public static fromInt(int value) { 
    //Builds a MyTypeSafeEnum from the value, implementation omitted 
    return theMyTypeSafeEnum; 
    } 

    public int getValue() { 
    return this.value; 
    } 
} 

私はJAX-WSの操作でparemetersとしてこれらの列挙クラスを使用したいのですが、タイプの定義が空であるWSDLを生成:

<xs:complexType name="myTypeSafeEnum"> 
    <xs:sequence/> 
</xs:complexType> 

私はXmlAdapterを使用する必要があります考え出したので、私は次のクラスを作成しました:

を210

@XmlJavaTypeAdapter(MyTypeSafeEnumXmlAdapter.class)アノテーションをクラスに追加しましたが、生成されたWSDLには何の効果もありませんでした。

これらのクラスをJAX-WS操作のパラメータとしてどのように使用できますか?現時点では、enumタイプを使用するようにコードをリファクタリングすることは問題になりません。それは、このようなXMLを生成します

public class MyClass { 
    private MyTypeSafeEnum someVar; 

    @XmlJavaTypeAdapter(MyTypeSafeEnumXmlAdapter.class) 
    public MyTypeSafeEnum getSomeVar() { 
     return someVar; 
    } 
} 

:あなたはこのようなクラスを持っているのであれば、その後

public class MyTypeSafeEnumXmlAdapter extends XmlAdapter<Integer, MyTypeSafeEnum> { 
    @Override 
    public Integer marshal(MyTypeSafeEnum v) throws Exception { 
     return v.getValue(); 
    } 

    @Override 
    public MyTypeSafeEnum unmarshal(Integer v) throws Exception { 
     return MyTypeSafeEnum.fromInt(v); 
    } 
} 

答えて

1

はあなたのMyTypeSafeEnumXmlAdapterにおけるタイプの順序を逆にする必要があります

<xs:complexType name="myClass"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="someVar" type="xs:int"/> 
    </xs:sequence> 
</xs:complexType> 

Webサービスクライアントは、そのフィールドを整数として認識します。そのため、列挙型インスタンスの1つにマップされない整数を渡さないようにするか、何とか処理しなければなりません。

+0

これは機能します。ありがとう! – iruediger

関連する問題