2011-06-06 49 views
1

我有一類這樣的:JAXB中的兩個@XmlJavaTypeAdapters用於一個@XmlAttribute?

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

    ... 

    @XmlAttribute(name = "partyName") 
    @XmlJavaTypeAdapter(CustomerGroupRelationships.Adapter.class) 
    private List<BilltoCustomer> billtoCustomers = new ArrayList<BilltoCustomer>(); 

    @XmlAttribute(name = "partyName") 
    @XmlJavaTypeAdapter(PartyNames.Adapter.class) 
    private PartyName partyName; 

    ... 
} 

看來JAXB不能爲一個屬性(這裏partyName)映射表@XmlJavaTypeAdapter秒。如果我註釋掉billtoCustomers上的註釋或partyName上的註釋,則可以從XML讀取其他成員變量,而不會出現任何問題。

如何在同一時間獲得兩個值?

+2

你有什麼期望時,你映射兩個字段相同的屬性發生? – 2011-06-06 14:49:13

+0

我只從XML閱讀。並且向其中一個字段添加'@ XmlTransient'也不起作用。 – Landei 2011-06-06 15:05:20

回答

2

你可以映射屬性之一(partyName),然後使用afterUnmarshal事件導出其他財產(billToCustomers):

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

    ... 

    @XmlTransient  
    private List<BilltoCustomer> billtoCustomers = new ArrayList<BilltoCustomer>(); 

    @XmlAttribute(name = "partyName") 
    @XmlJavaTypeAdapter(PartyNames.Adapter.class) 
    private PartyName partyName; 


    void afterUnmarshal(Unmarshaller u, Object parent) { 
     // Derive billToCustomers from partyName 
    } 

    ... 
} 
相關問題