JAXB Unmarshalling - дескриптор с корневым элементом по умолчанию ... не найден - PullRequest
0 голосов
/ 15 февраля 2019

У меня возникла проблема, связанная с удалением ответа api xml в созданный мной POJO.

Я уверен, что контекст JAXB знает о моем классе, потому что я могу правильно его маршалировать.

POJO

package com.bnh.element.misc.Requests;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "selectionResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class SelectionResponse {
    @XmlElement
    boolean _hasErrors;
    @XmlElement
    int selectionIndex;
    @XmlElement
    String type;

}

Попытка его отмены:

Object response = JAXB_CONTEXT.createUnmarshaller()
    .unmarshal( new StringReader(xml) );

Исключение

[Исключение [EclipseLink-25008] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.XMLMarshalException Описание исключения: дескриптор с корневым элементом по умолчанию {http://tripos.vantiv.com/2014/09/TriPos.Api}selectionResponse былне найден в проекте] at org.eclipse.persistence.jaxb.JAXBUnmarshaller.handleXMLMarshalException (JAXBUnmarshaller.java:1110)

Фактический ответ от API :

<selectionResponse
  xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://tripos.vantiv.com/2014/09/TriPos.Api">
  <_errors />
  <_hasErrors>false</_hasErrors>
  <_links />
  <_logs
    xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:type="Logs" />
    <_type>selectionResponse</_type>
    <_warnings />
    <selectionIndex>0</selectionIndex>
  </selectionResponse>

Строка, которая генерируется при маршалинге объекта:

<selectionResponse
    xmlns:ns0="http://tripos.vantiv.com/2014/09/TriPos.Api">
    <_hasErrors>false</_hasErrors>
    <selectionIndex>0</selectionIndex>
</selectionResponse>

Любая помощь приветствуется.Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2019

Ваша ошибка говорит о многом:

Описание исключения: дескриптор с корневым элементом по умолчанию {http://tripos.vantiv.com/2014/09/TriPos.Api}selectionResponse не найден в проекте]

Значение по умолчанию xmlns в вашем xml:

  xmlns="http://tripos.vantiv.com/2014/09/TriPos.Api">

Его нельзя «угадать», поэтому добавьте пространство имен в объявление корневого элемента, например:

@XmlRootElement(name = "selectionResponse",
    namespace="http://tripos.vantiv.com/2014/09/TriPos.Api")
@XmlAccessorType(XmlAccessType.FIELD)
public static class SelectionResponse {
...
...