我有一個具有2500個可能的Java類的應用程序,可以通過Web服務返回(使用CXF完成)。
問題是,爲2500個類創建一個JAXB上下文需要很長時間和大量內存,而在大多數場景中只需要200個類。我想要的是一個JAXB上下文,它知道只對所需的類進行延遲處理(將所有代碼生成的東西延遲到需要類時)。
我知道當前的實現不支持它,但我想擴展它。
如果有人知道可能的鉤子或一個好的起點,它會很好。
另一點是哪個引擎會更容易延伸,moxy或metro。 由於提前,
阿夫納JAXB類的惰性處理
2
A
回答
1
隨着EclipseLink JAXB (MOXy)可以使用SESSION_EVENT_LISTENER
屬性來對底層的元數據能夠延遲初始化如下:
import java.util.*;
import javax.xml.bind.JAXBContext;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.sessions.*;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBContextProperties.SESSION_EVENT_LISTENER, new SessionEventAdapter() {
@Override
public void preLogin(SessionEvent event) {
for(Map.Entry<Class, ClassDescriptor> entry : event.getSession().getProject().getDescriptors().entrySet()) {
XMLDescriptor a;
((XMLDescriptor) entry.getValue()).setLazilyInitialized(true);
}
}
});
JAXBContext jc = JAXBContext.newInstance(new Class[] {Root.class}, properties);
}
}
JAXB參考實現也有類似的性質,我可以」目前找不到。如果沒有一個職位,作爲一個答案,你可以提出問題,他們的郵件列表:
+1
謝謝布萊斯。我想在服務器運行之間緩存整個JAXB上下文數據,所以它根本不需要掃描類。可以爲Moxy開發這樣的功能嗎(我打算這麼做,但是我想在開始之前知道這是可能的)@Blaise Doughan –
相關問題
- 1. JAXB處理
- 2. 如何處理JAXB
- 3. JAXB:處理根元素
- 4. JAXB和XSLT處理器
- 5. 在.NET中處理JAXB @XMLIDRef
- 6. 在JAXB中處理CDATA
- 7. JAXB無法處理接口
- 8. JAXB/Jackson處理數組長
- 9. 與JAXB集合處理
- 10. gradle擴展可以處理屬性的懶惰評估嗎?
- 11. 配置JAXB解組器處理具有處理器方法和字段的類
- 12. C#方便懶惰的異常處理
- 13. 在C++類與懶惰的計算處理
- 14. JAXB無法處理名稱中包含冒號(:)的屬性?
- 15. JAXB如何處理marshall + jersey的接口
- 16. 處理JAXB中的嵌套元素
- 17. 如何正確處理繼承的JAXB
- 18. 如何使用JAXB處理無效的枚舉類型?
- 19. 如何處理懶惰登錄?
- 20. 處理無限(懶惰)序列
- 21. JPA Hibernate JAXB懶惰初始化
- 22. Eclipselink fetch-join子類的惰性關聯
- 23. NSCollectionView惰性加載類似的行爲
- 24. Java中的惰性參數類型?
- 25. JAXB不能處理接口,參數和返回類型
- 26. 加載懶惰代理屬性
- 27. JAXB可以處理java.time對象嗎?
- 28. 如何在JAXB中處理多個@XmlID
- 29. 使JAXB生成XML處理指令
- 30. JAXB布爾處理古怪和JSF
對不起我的無知,但你靜態生成的類(比如使用Eclipse的Web服務客戶端嚮導)或dinamically(例如http://cxf.apache.org/docs/dynamic-clients.html)? – Leo
所有2500課都是靜態的(手寫)@Leo –