我該如何編組對象層次結構,以便使組件對象不成爲嵌套的XML元素,而不是使其屬性成爲根元素的直接子項,其名稱前綴爲其類型。將嵌套對象編組爲「扁平」XML結構
例如,給定:
(A)
public class Customer {
protected String firstName;
protected String lastName;
protected Address address;
}
public class Address {
protected String street;
protected String city;
}
使用通常的JAXB註釋會導致
(B)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address>
<street>123 Rizal Avenue</street>
<city>Manila</city>
</address>
</customer>
但是,相反,我需要馬歇爾一樣
(C)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address_street>123 Rizal Avenue</address_street>
<address_city>Manila</address_city>
</customer>
它如果有一些JAXB咒語可以解決我的需求,那麼這將非常棒,因爲我已經在大部分的JAXB中使用了JAXB圍繞這個問題的事情。事實上,這些呈現一些約束到我的具體情況:
- 在(A)中的Java類由JAXB生成從對應於XML結構中(B)現有的模式。我寧願不維護生成的類的修改版本。
- 我沒有擁有或維護上述模式。實際的模式非常大,並且經常會稍作修改。想出和維護一個等效的模式將是單調乏味的。此外,爲了跟上架構修改,我依靠JAXB自動生成類。
- 如果它使事情變得更容易,嵌套只能達到一個深度。在該示例中,
Address
不包含任何其他複雜類型。
我期待在從莫西的@XmlPath
註釋,但我無法弄清楚如何獲得前綴爲(C)節點名稱。
我夢想有一個解決方案,其中一些xjc自定義提供了正確的JAXB註釋讓我繼續前進,但這看起來不太可能從我的搜索到目前爲止。任何非JAXB解決方案都已足夠。
正如我所提到的,類是從相當大的XML模式自動生成的。所以手動維護第二組類將是令人望而卻步的。此外,當我開始編寫反射代碼時,我還想寫出我想要的XML而不是寫入另一個類。謝謝。 –