Мое приложение получает полезную нагрузку объекта, упорядоченную в XML, например:
<targetedMessage>
<sender>external application</sender>
<payload class="class.path.from.external.application.Foo">
<id>1</id>
</payload>
</targetedMessage>
Класс полезной нагрузки (например, Foo) может быть одним из нескольких классов с общей структурой наследования.
Каждый из них имеет соответствующий класс в моем приложении:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo extends Baz {
private Long id;
//other fields, getters, setters
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Bar extends Baz {
private Long id;
// other fields, getters, setters
}
, и enum может использоваться для поиска локального класса объекта на основе стороннего пути к классам:
public enum ForeignClass {
FOO("class.path.from.external.application.Foo", Foo.class),
BAR("class.path.from.external.application.Bar", Bar.class);
public static getClassFromForeignClassPath(String foreignClassPath) {
// return class
}
У меня также есть класс TargetedMessage
для сбора мета-информации, касающейся самого сообщения:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class TargetedMessage {
private String sender;
private Baz baz;
}
Какая аннотация потребуется для правильной разборки XML-кода?Я пытался использовать XmlAdapter для поля Baz
в классе TargetedMessage
, но параметр ValueType всегда равен нулю.
@XmlAttribute
не выглядит так, как будто он может работать, так как значения атрибутов class
не совпадают с их соответствующими именами локальных классов.