У меня проблема с тем, что методы afterUnmarshal()
в моих классах не вызываются, если класс является членом коллекции.
Помимо объявления метода для класса, созданного с помощью unmarshalling,Есть ли другие шаги, которые я должен выполнить?(Я не вижу ничего другого в документах )
Вот тест, который показывает мою проблему:
Учитывая эти два класса домена:
@XmlRootElement(name="Parent")
public class Parent {
public boolean unmarshalCalled = false;
@XmlPath("Children/Child")
List<Child> children;
void afterUnmarshal(Unmarshaller u, Object parent)
{
unmarshalCalled = true;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Child {
public boolean unmarshalCalled = false;
@Getter @Setter
@XmlPath("@name")
private String name;
void afterUnmarshal(Unmarshaller u, Object parent)
{
unmarshalCalled = true;
}
}
Этот тест не пройден:
public class UnmarshalTest {
@Test
@SneakyThrows
public void testUnmarshal()
{
String xml = "<Parent><Children><Child name='Jack' /><Child name='Jill' /></Children></Parent>";
JAXBContext context = getContext();
Parent parent = (Parent) context.createUnmarshaller().unmarshal(new StringReader(xml));
assertTrue(parent.unmarshalCalled);
for (Child child : parent.children)
{
assertThat(child.getName(),notNullValue());
assertTrue(child.unmarshalCalled); // This assertion fails
}
}
@SneakyThrows
public static JAXBContext getContext()
{
JAXBContext context;
context = org.eclipse.persistence.jaxb.JAXBContext.newInstance(Parent.class);
return context;
}
}
Это ошибка, или я пропустил некоторые шаги, чтобы заставить это работать правильно?