我對XML非常陌生,我遇到了一個問題,我無法解決問題,並且在查找幾個小時後我決定發佈我的問題。@XmlIDREF在編組爲XML時沒有看到層次結構
我正在使用@XmlIDREF只是XML文檔上的一些java類的XmlID。 所有的工作都很好,但是當JAXB尋找依賴於樹層次結構的ID時,似乎無法找到它並再次釋放整個對象。
我會告訴你(簡化)模型,它是所有關於光路由器的java類代表了路由器和一些組件:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class OpticalRouter {
// @XmlID inherited from upper class
private List<FiberConnection> fiberConnections = new ArrayList<FiberConnection>();
}
這是一個光纖連接:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class FiberConnection {
@XmlID
private String instanceID;
@XmlIDREF
Card card;
@XmlIDREF
Port port;
@XmlIDREF
Channel channel;
}
而且終於:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({
DropCard.class,
AddCard.class
})
public class Card{
// @XmlID inherited from supper class
}
所有工作正常,當我馬歇爾端口和頻道,因爲他們沒有子類....但是當它是時間編組卡如果它是一個AddCard或DropCard它封送它另一次,而不是使用IDREF。 看來,JAXB沒有找到他們的層次結構...
如果我改變原來的「卡卡」, FiberConnection爲「AddCard」,例如它也可以工作(JAXB找到IdREF並且不再編組它)。
希望我解釋清楚。 問如果不是,我會很高興回答:)
在此先感謝!
EDITED
好吧,我回來了新的信息和結果,以更好地解釋自己。
由於它是一個龐大的類模型,我不想讓帖子難以閱讀,所以我創建了一種UML類圖,使它更易於閱讀,這些信息應該有助於幫助(XML註釋和參數)。我還包括@XmlElement標籤,正如Blaise告訴我的一樣(再次感謝)。
我還包括(完成)XML的一部分以更好地瞭解發生了什麼。
在這裏我有一個fiberConnection如上所述。
我有一個scCard和fiberChannelPlan已已經之前的XML文檔(檢查),但他們正在重新整理 ...編組
在交流中,srcPort,srcChannel和fiberChannels,也編制過,只有他們的ID。
<OpticalRouter>
<fiberConnections>
<instanceID>[email protected]</instanceID>
<srcCard xsi:type="DropCard" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<instanceID>[email protected]</instanceID>
<type>11</type>
<subtype>1</subtype>
<chasis>0</chasis>
<fiberChannelPlan xsi:type="ChannelPlan">
<instanceID>[email protected]</instanceID>
<firstChannel>0</firstChannel>
<lastChannel>0</lastChannel>
<maxFreq>196.1</maxFreq>
<minFreq>191.6</minFreq>
<fiberChannels>Channel/360</fiberChannels>
<fiberChannels>Channel/368</fiberChannels>
<fiberChannels>Channel/376</fiberChannels>
<fiberChannels>Channel/384</fiberChannels>
</fiberChannelPlan>
<cardExpressPort>[email protected]</cardExpressPort>
<carCommonPort>[email protected]</carCommonPort>
</srcCard>
<srcPort>[email protected]</srcPort>
<srcChannel>Channel/184</srcChannel>
</fiberConnections>
</OpticalRouter>
我認爲這個問題是關係到那個帖子,我發現(即使我使用Linux和Java 1.6)或我在這裏看到的StarckOverflow其他職位的東西: java.net/jira/browse/JAXB-870
在此先感謝!
P.S:我使用的所有代碼都是開源的,如果有人認爲它應該對他更容易,可以從git倉庫的主要源代碼下載。
也許我很困惑,但我不認爲這裏所說的'ports'或'channels'任何成員 - 是一些這些集合排序,你沒有向我們展示? – 2013-04-29 17:47:44
Nop。我忘了發佈它,但**端口**和**頻道**都是類似**卡**。 我一直在做一些測試,我會更新信息更多的信息。 謝謝彼得! – 2013-05-01 19:18:12
還在做一些測試,什麼也沒有... 任何人都知道,如果重寫編組函數我可以以IDREF看到它的某種方式更改ID? – 2013-05-16 11:54:41