我有許多使用Jersey直接編組和解組的JAXB bean。JAXB集合(列表<T>)使用Pascal Case來代替元素名稱的駝峯案例
E.g.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Artifact", propOrder = {
"artifactId",
"artifactType",
"contentHash"
})
@XmlSeeAlso({
EmailArtifact.class,
ManagedDocArtifact.class
})
@XmlRootElement(name ="Artifact")
public class Artifact {
protected String artifactId;
protected String artifactType;
protected String contentHash;
...
...
...
}
如果我創建一個返回單個工件對象的GET方法。它正確地產生XML:
<Artifact>
<artifactId>293289392839283</artifactId>
<artifactType>EMAIL</artifactType>
<contentHash>2837873827322</contentHash>
</Artifact>
在這裏,我已經能夠成功地控制了神器元素的名稱有一個大寫字母「A」開頭。
不過,我創建一個返回神器對象的集合的GET方法,我結束了:
<artifacts>
<Artifact>
<artifactId>293289392839283</artifactId>
<artifactType>EMAIL</artifactType>
<contentHash>2837873827322</contentHash>
</Artifact>
<Artifact>
<artifactId>293289392839283</artifactId>
<artifactType>EMAIL</artifactType>
<contentHash>2837873827322</contentHash>
</Artifact>
</artifacts>
正如你所看到的集合有一個小寫的「A」外部元素。爲了符合我們自己的內部標準,我希望這是一個資本「A」 - Artifacts。
我看不到在JAXB中可以定義的位置,它實際上是控制它的Jersey框架嗎?
我們可以控制爲集合生成的元素名稱嗎?
非常感謝,
詹姆斯
1. AFAIK JAXB不允許你馬歇爾集合(例如ArrayList的'')這樣。但它允許您序列化一個具有集合作爲屬性的對象。 2。我對Jersey並不熟悉,但是我想你需要知道JAXB是否是單獨序列化每個工件的JAXB,以及其他某個層(Jersey)是否構建了塊的整個文檔,還是JAXB是否爲該集合生成了XML。 3.你可以發佈一些代碼(或在某處發佈) - 如何調用它?我正在嘗試使用簡單的JAXB,但這並不能模擬您的設置。 –
2009-10-09 18:49:40
我懷疑你是對的 - 它是澤西,它允許我編組/收集JAXB bean(我已經向澤西島用戶組提出了這個問題)。因此,我希望有一些配置可以讓我爲集合的XML元素名稱設置名稱或規則......我們將拭目以待。正如您所指出的,一種解決方法是創建一個新的JAXB bean - 比如說具有單個集合成員的「Artifacts」,例如列表工件 - 我覺得雖然引入了一大堆沒有增加價值的類。感謝幫助。 James –
jallch
2009-10-10 10:25:22