У клиента есть проблема с запуском 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» могут быть связаны с тем, что мой код на самом деле имеет два перечисления, которые написаны одинаково, но я для краткости оставил их в этом примере.