У клиента возникла проблема с запуском java2ws в части своего кода, который использует и расширяет классы, потребляемые из моих веб-служб SOAP. Еще не запутались? :)
Я открываю веб-службу SOAP (JBoss5, Java 6). Кто-то использует этот веб-сервис с помощью Axis1 и создает из него банку с типами данных и клиентскими заглушками. Затем они определяют свой собственный тип, который расширяет один из моих типов. Мой тип содержит перечисление.
class MyParent {
private MyEnumType myEnum;
// getters, settters for myEnum;
}
class TheirChild extends MyParent {
...
}
Когда они запускают java2ws в своем коде (который расширяет мой класс), они получают
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
net.foo.bar.MyEnuMType does not have a no-arg default constructor.
this problem is related to the following location:
at net.foo.bar.MyEnumType
at public net.foo.bar.MyEnumType net.foo.bar.MyParent.getMyEnum()
Перечисление, которое я определил, приведено ниже. Вот как он выходит после потребления, но так я определил его на сервере приложений:
@XmlType(name = "MyEnumType")
@XmlEnum
public enum MyEnumType {
Val1("Val1"),
Val2("Val2")
private final String value;
MyEnumType(String v) {
value = v;
}
public String value() {
return value;
}
public static MyEnumType fromValue(String v) {
if (v == null || v.length() == 0) {
return null;
}
if (v.equals("Val1")) {
return MyEnumType.Val1;
}
if (v.equals("Val2")) {
return MyEnumType.Val2;
}
return null;
}
}
Я видел вещи в Интернете и другие сообщения, например (этот) относительно неспособности Jaxb обрабатывать списки или подобные вещи, но я сбит с толку своим перечислением. Я почти уверен, что у вас не может быть конструктора по умолчанию для перечисления (ну, по крайней мере, открытый конструктор без аргументов, Java кричит на меня, когда я пытаюсь), поэтому я не уверен, что делает эту ошибку возможной. Любые идеи?
Кроме того, «2 значения IllegalAnnotationsExceptions» могут быть связаны с тем, что мой код на самом деле имеет два перечисления, которые написаны одинаково, но для краткости я исключил их из этого примера.