我有这两个模型。
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>


我做错了什么?

最佳答案

@XmlRootElement仅应在根元素上设置。这就是为什么它被称为@XmlRootElement的原因。在其他任何地方都将被忽略。

尝试从@XmlRootElement类中删除AssetMetadataType,然后将AssetMetadata中的属性更改为:

@XmlElement(name="AssetMetadataType")
private AssetMetadataType assetMetadataType;

关于java - jaxb与其他类一起解码为属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8878168/

10-11 08:37