У меня есть старый код (до Java 1.5), который использует классы для реализации безопасных типов, например:
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, но в сгенерированном WSDL определение типа пусто:
<xs:complexType name="myTypeSafeEnum">
<xs:sequence/>
</xs:complexType>
Я решил, что должен использовать XmlAdapter , поэтому я создал следующий класс:
public class MyTypeSafeEnumXmlAdapter extends XmlAdapter<MyTypeSafeEnum, Integer> {
@Override
public MyTypeSafeEnum marshal(Integer v) throws Exception {
return MyTypeSafeEnum.fromInt(v);
}
@Override
public Integer unmarshal(MyTypeSafeEnum e) throws Exception {
return e.getValue();
}
}
Я добавил аннотацию @XmlJavaTypeAdapter(MyTypeSafeEnumXmlAdapter.class)
в свой класс, но она не повлияла на сгенерированный WSDL.
Как я могу использовать эти классы в качестве параметров в операции JAX-WS? В настоящее время рефакторинг кода для использования типа enum
не подлежит обсуждению.