Если у вас есть контроль над вашей схемой, вы можете определить базовый абстрактный тип, из которого могут распространяться другие ваши типы. Я сам не пробовал, поэтому не уверен, как XmlBeans справится с этим.
<complexType name="NamedEntity" abstract="true">
<sequence>
<element name="name" type="string"/>
</sequence>
</complexType>
<complexType name="DepartmentType">
<complexContent>
<extension base="NamedEntity">
<sequence>
<element name="whatever"/>
</sequence>
</extension>
</complexContent>
</complexType>
В противном случае это обходной путь (хак?), Но вы можете использовать Commons BeanUtils , если ваши сгенерированные классы будут следовать соглашению об именах JavaBean. Если эти объекты часто передаются, вы можете создать класс-оболочку, чтобы сделать вызовы немного более конкретными.
public class Department {
XmlObject obj;
public Department(XmlObject obj){
if(!obj instanceof DepartmentType || !obj instanceof OrganizatiopnType){
throw new IllegalArgumentException();
}
this.obj = obj;
}
public String getName(){
return (String)PropertyUtils.getProperty(obj, "name");
}
}
Любая проблема может быть решена с помощью другого уровня косвенности ..... за исключением слишком большого количества косвенных указаний.