Последнее поле JaxB возвращает нуль при unmarshall - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь разобрать xml-файл, используя JaxB.Он получает все значения, кроме последней части (значения).Значение может быть простым значением или может быть списком значений.Я могу получить значение, исключив translationObjectValue, но это относится только к отдельным значениям, а не к списку значений.Я хотел поддержать оба типа значений.Ниже приведен пример моего xml-файла.

    <?xml version="1.0" encoding="UTF-8"?><translationObjectFile fileType="ASSETMETADATA">
  <translationObjectProperties>
    <property isMultiValue="false" nodePath="/content/dam/we-retail/fr/experiences/steelhead-and-spines-in-alaska/steelhead-and-spines-in-alaska-1.jpg/jcr:content/metadata" propertyName="dc:description">Test92 - Desc</property>
    <property isMultiValue="false" nodePath="/content/dam/we-retail/fr/experiences/steelhead-and-spines-in-alaska/steelhead-and-spines-in-alaska-1.jpg/jcr:content/metadata" propertyName="dc:rights">Sample Photography</property>
    <property isMultiValue="true" nodePath="/content/dam/we-retail/fr/experiences/steelhead-and-spines-in-alaska/steelhead-and-spines-in-alaska-1.jpg/jcr:content/metadata" propertyName="dc:subject">
      <value order="0">alaska</value>
      <value order="1">bolivia</value>
      <value order="2">camping</value>
      <value order="3">condoriri</value>
    </property>
    <property isMultiValue="false" nodePath="/content/dam/we-retail/fr/experiences/steelhead-and-spines-in-alaska/steelhead-and-spines-in-alaska-1.jpg/jcr:content/metadata" propertyName="dc:title">Test92 - Title</property>
  </translationObjectProperties>
</translationObjectFile>

Ниже приведены мои методы получения / установки.

TranslationObjectFile

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class TranslationObjectFile {
    @XmlAttribute
    private String fileType;
    @XmlAttribute
    private String sourcePath;
    @XmlElementWrapper
    @XmlElement(name = "property")
    private List<TranslationObjectProperty> translationObjectProperties;

TranslationObjectProperty

@XmlAccessorType(XmlAccessType.FIELD)
public class TranslationObjectProperty {
    @XmlAttribute
    private boolean isMultiValue;
    @XmlAttribute
    private String nodePath;
    @XmlAttribute(name = "propertyName")
    private String propertyNameValue;
    @XmlElementWrapper
    @XmlElement(name = "value")
    private List<TranslationObjectValue> subjectValue;

TranslationObjectValue

@XmlAccessorType(XmlAccessType.FIELD)
public class TranslationObjectValue {
    @XmlValue
    private String value;

Ниже приведен код для удаления содержимого:

String inputStream = IOUtils.toString(xmlInputStream, "UTF-8"); 
final JAXBContext jc = JAXBContext.newInstance(TranslationObjectFile.class);
final Unmarshaller unmarshaller = jc.createUnmarshaller();
Object value = unmarshaller.unmarshal(new StringReader(inputStream));
return (T) value;

Благодарим вас зазаранее!

...