我有这两种模式。 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 unmarshaller。 spring config:
<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>
我做错了什么?
答案 0 :(得分:2)
@XmlRootElement
只应在根元素上设置。这就是为什么它被称为@XmlRootElement
。在其他任何地方都会被忽略。
尝试从@XmlRootElement
课程中删除AssetMetadataType
,并将AssetMetadata
中的媒体资源更改为:
@XmlElement(name="AssetMetadataType")
private AssetMetadataType assetMetadataType;