Невозможно отобразить поле в JAXB для демаршаллинга, поля заполняются как нулевые - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть XML, который я хотел бы преобразовать в POJO с использованием JAXB, но я не могу, и все элементы в родительском классе заполняются как null.

Вход XML:

<Response>
  <parameters>
    <Id>101</Id>
    <Status>SUCCESS</Status>
  </parameters>
</Response>

FileWriterService.writeMethod ()

  JAXBContext context = JAXBContext.newInstance(Response.class);
  Response response = (Response) context.createUnmarshaller().unmarshal(new 
  StringReader(inputXml));
  System.out.println("response: " + response);

Выход:

response: ClassPojo [parameters = ClassPojo [Id = null, Status = null]]

Ответ. java

@XmlRootElement(name="Response")
public class Response {

    private Parameters parameters;

    public Parameters getParameters() {
        return parameters;
    }

    public void setParameters(Parameters parameters) {
        this.parameters = parameters;
    }

    @Override
    public String toString() {
        return "ClassPojo [parameters = " + parameters + "]";
    }

}

Параметры. java

public class Parameters {

    private String Id;
    private String Status;

    public String getId() {
        return Id;
    }

    public void setId(String Id) {
        this.Id = Id;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String Status) {
        this.Status = Status;
    }

    @Override
    public String toString() {
        return "ClassPojo [Id = " + Id + ", Status = " + Status + "]";
    }
}

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Попробуйте с аннотацией @XmlElement, эта аннотация отображает поле в xml элемент

Ответ. java

@XmlElement
private Parameters parameters;

Параметры. java

@XmlElement
private String Id;
@XmlElement
private String Status;
0 голосов
/ 07 февраля 2020

Спасибо за указатель Лакшан. После реализации вашего решения исходная проблема была решена, но появилась ошибка, связанная с com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions

В дополнение к вашим изменениям мне также пришлось добавить XmlAccessorType:

@XmlRootElement(name = "Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...