2012-01-16 90 views
1

我有這兩個模型。 AssetMetadata:jaxb解組與其他類屬性

 @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解組這樣的。 Spring配置:

<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> 

我該怎麼辦錯了嗎?

回答

2

@XmlRootElement應該只設置在根元素上。這就是爲什麼叫做@XmlRootElement。它會在其他地方被忽略。

嘗試從AssetMetadataType類刪除@XmlRootElement,並更改AssetMetadata的屬性爲:

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

謝謝您的回答。不幸的是,我得到了這個異常,然後:類有兩個同名的屬性「assetMetadataType」 – superbly 2012-01-16 10:52:09

+0

好吧你是對的:我必須刪除AssetMetadata模型中的getAssetMetadataType()和setAssetMetadataType()方法。現在它工作。謝謝。 – superbly 2012-01-16 10:58:04

+1

+1 - @shifty,你不需要刪除任何方法。只要確保你要麼註釋get方法,要麼註解字段(實例變量),然後設置@XmlAccessorType(XmlAccessType.FIELD):http://blog.bdoughan.com/2011/06/using-jaxbs- xmlaccessortype-to.html – 2012-01-16 11:17:19