JAXB Unmarshall List Правильное количество элементов, но значение NULL - PullRequest
0 голосов
/ 17 января 2020

Мне дали XML без схемы. Я построил все классы, и большая часть XML правильно распаковывается.

Однако у меня есть один список, который в зависимости от аннотаций возвращает:

  1. Список с правильным номером элементы, в которых значения равны нулю для каждого, или

  2. Возвращается только последний элемент, если значение верное.

XML:

...
                    <assessedValues>
                        <assessment>
                            <taxYear>2019</taxYear>
                            <landMarketValue>29340</landMarketValue>
                            <improvementMarketValue>163710</improvementMarketValue>
                            <homesteadCapValue>0</homesteadCapValue>
                            <agMarketValue>0</agMarketValue>
                            <agAssessedValue>0</agAssessedValue>
                            <totalMarketValue>193050</totalMarketValue>
                            <totalAssessedValue>193050</totalAssessedValue>
                            <certified>true</certified>
                            <woExemptAmount>5036.350176000001</woExemptAmount>
                            <exemptions>
                                <exemption>Alpha</exemption>
                                <exemption>Bravo</exemption>
                                <exemption>Charlie</exemption>
                                <exemption>Delta</exemption>
                            </exemptions>
                        </assessment>
                    </assessedValues>
...

Unmarshalled (версия 1):

    assessedValues=
       AssessedValuesDTO{assessments=[
          AssessmentDTO{
             taxYear='2019', 
             landMarketValue='29340', 
             improvementMarketValue='163710', 
             homesteadCapValue='0', 
             agMarketValue='0', 
             agAssessedValue='0', 
             totalMarketValue='193050', 
             totalAssessedValue='193050', 
             certified='true', 
             woExemptAmount='5036.350176000001', 
             exemptions=[
               ExemptionDTO{exemption='null'}, 
               ExemptionDTO{exemption='null'}, 
               ExemptionDTO{exemption='null'}, 
               ExemptionDTO{exemption='null'}]}
      ]}

Unmarshalled (версия 2):

    assessedValues=
       AssessedValuesDTO{assessments=[
          AssessmentDTO{
             taxYear='2019', 
             landMarketValue='29340', 
             improvementMarketValue='163710', 
             homesteadCapValue='0', 
             agMarketValue='0', 
             agAssessedValue='0', 
             totalMarketValue='193050', 
             totalAssessedValue='193050', 
             certified='true', 
             woExemptAmount='5036.350176000001', 
             exemptions=[
               ExemptionDTO{exemption='Delta'}]}
      ]}

AsotedValue:

//@XmlRootElement(name="assessedValues")
public class AssessedValuesDTO {
    List<AssessmentDTO> assessments;

    public List<AssessmentDTO> getAssessments() {
        return assessments;
    }

    //@XmlElementWrapper(name="assessedValues")
    @XmlElement(name = "assessment")
    public void setAssessments(List<AssessmentDTO> assessments) {
        this.assessments = assessments;
    }

    @Override
    public String toString() {
        return "AssessedValuesDTO{" +
                "assessments=" + assessments +
                '}';
    }
}

Оценка :

//@XmlRootElement(name="assessment")
@XmlAccessorType(XmlAccessType.FIELD)
public class AssessmentDTO {

    String taxYear;
    String landMarketValue;
    String improvementMarketValue;
    String homesteadCapValue;
    String agMarketValue;
    String agAssessedValue;
    String totalMarketValue;
    String totalAssessedValue;
    String certified;
    String woExemptAmount;
    @XmlElementWrapper(name="exemptions")
    @XmlElement(name = "exemption", type=ExemptionDTO.class)
    List<ExemptionDTO> exemptions;


    @Override
    public String toString() {
        return "\n\t\tAssessmentDTO{" +
                "taxYear='" + taxYear + '\'' +
                ", landMarketValue='" + landMarketValue + '\'' +
                ", improvementMarketValue='" + improvementMarketValue + '\'' +
                ", homesteadCapValue='" + homesteadCapValue + '\'' +
                ", agMarketValue='" + agMarketValue + '\'' +
                ", agAssessedValue='" + agAssessedValue + '\'' +
                ", totalMarketValue='" + totalMarketValue + '\'' +
                ", totalAssessedValue='" + totalAssessedValue + '\'' +
                ", certified='" + certified + '\'' +
                ", woExemptAmount='" + woExemptAmount + '\'' +
                ", exemptions=" + exemptions +
                "}\n";
    }
}

Исключение:

//@XmlRootElement(name="exemption")
//@XmlAccessorType(XmlAccessType.FIELD)
public class ExemptionDTO {

    //@XmlElement(name = "exemption")
    String exemption;

    public String getExemption() {
        return exemption;
    }

    public void setExemption(String exemption) {
        this.exemption = exemption;
    }

    @Override
    public String toString() {
        return "\n\t\t\tExemptionDTO{" +
                "exemption='" + exemption + '\'' +
                '}';
    }
}

У меня есть списки в другой части XML, работающие нормально, зачем мне это поведение? Не уверен, если проблема или нет, но я запускаю Java 11.

Я думаю, может быть, мне нужно переместить список в выделенный DTO, но кажется, что этот способ работает в других частях кода, поэтому Я в тупике.

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

...