У меня есть два набора почти идентичных xsds для сотрудников, которые я использовал для генерации классов с помощью jaxb2-maven-plugin.
Эти два почти идентичны, за исключением одного для администратора, а другой для обычного пользователя.
1-й xsd xml выглядит так:
<Employee>
<Head id="xxx" type="ADMIN"/>
<Address type="HOME" from="dd-mm-yyyy">xxx</Address>
<PayRate>34</PayRate>
</Employee>
2-й xsd xml выглядит так:
<Employee>
<Head id="xxx" type="WORKER"/>
<Address type="HOME">xxx</Address>
</Employee>
Как видите, нет тегов from (в адресном теге) и PayRate во втором xml.
У меня открыт API REST, где я всегда получаю 1-й отформатированный полезный груз. Но в зависимости от типа сотрудника. Мне нужно преобразовать его во 2-го с помощью Eclipse MOXy .
private static DynamicJAXBContext dynamicJAXBContext = DynamicJAXBContextFactory.createContextFromXSD(
getClass().getClassLoader().getResourceAsStream("Employee-v1.xsd"), null,
com.something.Employee.class.getClassLoader(), null);
DynamicEntity dynamicEntity = (DynamicEntity) dynamicJAXBContext.createUnmarshaller().unmarshal(
new ByteArrayInputStream(xmlMapper.writeValueAsString(employeePojoOfV2).getBytes(StandardCharsets.UTF_8)));
com.something.Employee emp = new com.something.Employee();
emp.sethead(JAXB.unmarshal(dynamicEntity.get("Head"), Head.class));
emp.setAddress(JAXB.unmarshal(dynamicEntity.get("Address"), Address.class));
Однако, всегда выдает следующую ошибку:
Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred unmarshalling the document
Internal Exception: java.lang.ClassCastException: com.something.v2.Head cannot be cast to org.eclipse.persistence.internal.dynamic.DynamicEntityImpl
Это реально достижимо или я что-то не так делаю?