jaxb unmarshalling с другим классом как свойство - PullRequest
1 голос
/ 16 января 2012

У меня есть две модели.AssetMetadata:

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

        private AssetMetadataType assetMetadataType;
        private String id;
        private String assetId; 
        ....

AssetMetadataType:

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

        private String id;
        private String name;
        ....

Я использую демаршаллер JaxB следующим образом.весенний конфиг:

<oxm:jaxb2-marshaller id="marshaller">
    <oxm:class-to-be-bound name="ch.srf.esb.radioimporter.domain.AssetMetadata"/>
    <oxm:class-to-be-bound name="ch.srf.esb.radioimporter.domain.AssetMetadataType"/>
</oxm:jaxb2-marshaller>

Java-код:

@Autowired @Qualifier("marshaller") private Unmarshaller unmarshaller;
...
final InputStream is = new ByteArrayInputStream(xml.getBytes());
this.unmarshaller.unmarshal(new StreamSource(is));

Теперь, когда я отправляю следующий XML, AssetMetadataType не устанавливается:

<AssetMetadata>
  <AssetMetadataType>
    <id>1</id>
    <name>EPG</name>
  </AssetMetadataType>
  <assetId>39b4864d-931b-40c6-85ad-c45251b97952</assetId>
  <title>title</title>
  <description>description</description>
</AssetMetadata>

Что мне делатьсделать неправильно?

1 Ответ

2 голосов
/ 16 января 2012

@XmlRootElement должен быть установлен только для корневого элемента.Вот почему это называется @XmlRootElement.Это будет игнорироваться в любом другом месте.

Попробуйте удалить @XmlRootElement из класса AssetMetadataType и измените свойство в AssetMetadata на:

@XmlElement(name="AssetMetadataType")
private AssetMetadataType assetMetadataType;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...