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