2012-02-01 82 views
1

當我使用所有類創建jaxbcontext時,jaxb爲具有來自其他類的命名空間的類構建xml。如果我傳遞給jaxbcontext只有一個類它工作正常。 我的類是由xjc生成的。JAXB將命名空間寫入其他類中的一個類

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 

}) 
@XmlRootElement(name = "eReq") 
public class EReq { 
... 

而當我只將這個類傳遞給jaxbcontext的輸出如下。

<eReq><status>UNBLOCKED</status></eReq> 

但我把我所有的類到JAXB上下文輸出將是這樣的:

<eReq xmlns:ns2="myns1" xmlns:ns3="myns2" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"><status>UNBLOCKED</status></eReq> 

這是從我的其他類的命名空間。爲什麼jaxb把它放到這個班上?

回答

2

爲什麼JAXB把它放到這個類?

因爲JAXB上下文包含它創建的所有命名空間的超集,它只是將它們全部放在它生成的每個文檔中。

這樣做是因爲需要將名稱空間添加到根元素中(以避免在每個子元素上浪費大量重新聲明名稱空間),並且它不會事先知道任何給定集合需要哪些名稱空間綁定對象(JAXB支持增量序列化)。

所以JAXB運行時可能會避免這樣做;但事實並非如此。

如果你不喜歡它,那麼你需要建立多個上下文。