Я пытаюсь десериализовать XML с помощью XMLmapper, и он завершается неудачно со следующей ошибкой. POJO генерируются с использованием инструмента jaxb XJC при разрешении зависимостей. Та же десериализация проходит без проблем, если я использую jaxb Unmarhsalling. У меня нет никакого контроля над XSDS. Может кто-нибудь помочь? Я попытался добавить привязки, чтобы сгенерировать отдельные имена пакетов, это не помогло. Я думаю, что я не могу переименовать свойство, так как xml может потерпеть неудачу, поскольку я получаю XML из апстрима.
Есть предложения?
Несколько полей, представляющих свойство "PaymentPlanID": om.datatype.defn.v1.PaymentDetailDataType # paymentPlanID против om.datatype.defn.v1.PaymentDetailDataType # paymentPlanIDV2
Код ниже работает
jaxbContext = JAXBContext.newInstance(EventsRequestType.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
InputStream is = new ByteArrayInputStream(input.getBytes());
EventsRequestType outputRequest = ((JAXBElement<EventsRequestType>) jaxbUnmarshaller.unmarshal(is)).getValue();
Это не работает
jacksonXmlModule jacksonXmlModule = new JacksonXmlModule();
jacksonXmlModule.setDefaultUseWrapper(false);
MAPPER = new XmlMapper(jacksonXmlModule);
MAPPER.registerModule(new JaxbAnnotationModule());
EventsRequestType outputRequest = MAPPER.readValue(input, EventsRequestType.class);
Файл в Pojo, сгенерированный JAXB
@XmlElement(name = "PaymentPlanID", namespace = "urn:payment:messages:v1")
protected String paymentPlanID;
@XmlElement(name = "PaymentPlanID", namespace = "urn:payment:processor:messages:v2")
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlSchemaType(name = "token")
@Size(min = 1)
protected String paymentPlanIDV2;
Экстракт XSD
<xs:complexType name="PaymentDetailDataType">
<xs:complexContent>
<xs:extension base="data:BaseDataType">
<xs:sequence>
<xs:choice>
<xs:element ref="payment:PaymentPlanID">
</xs:element>
<xs:element ref="payment_v2:PaymentPlanID">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="PaymentPlanIDV2"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required">
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>