[英]JAXB Marshaller initialization
我需要將JAXB對象編組為xml格式字符串。 我正在使用SLSB並掛鈎代碼以在@PostConstruct
注釋方法中創建Marshaller
和其他東西。 這樣每次我都不需要加載架構並創建Marshaller。
@PostConstruct
注釋方法中的代碼如下所示。
JAXBContext jaxbContext = JAXBContext.newInstance(jaxbPackageName);
SchemaFactory factory = SchemaFactory
.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaUrl = Thread.currentThread().getContextClassLoader()
.getResource(resourcePath);
schema = factory.newSchema(schemaUrl);
setMarshaller(jaxbContext.createMarshaller());
getMarshaller().setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.FALSE);
getMarshaller().setSchema(schema);
getMarshaller().setEventHandler(new DefaultValidationEventHandler());
setUnmarshaller(jaxbContext.createUnmarshaller());
getUnmarshaller().setSchema(schema);
getUnmarshaller().setEventHandler(new DefaultValidationEventHandler());
當客戶端代碼需要對象的xml格式時,以下方法返回相同的內容。
OutputStream outputStream = new ByteArrayOutputStream();
getMarshaller().setProperty(Marshaller.JAXB_SCHEMA_LOCATION,
schemaLocation);
getMarshaller().marshal(document, outputStream);
xmlString = outputStream.toString();
我擔心的是,有沒有更好的方法來做同樣的事情(每當客戶端代碼想要獲取JAXB對象的xml格式時,返回相同的最快方法?)。
謝謝
我不知道使用JAXB進行編組/解組的任何其他方式。 當我遇到同樣的問題時,我檢查了CXF代碼並且它是相同的。
請參閱JAXB性能和線程安全性
與您的問題沒有直接關系,但是ByteArrayOutputStream #toString()將使用平台的默認字符編碼,而不是創建XML文檔時JAXB使用的編碼。 根據您對XML文檔的進一步計划,最好將其保留為字節數組,而不是嘗試從中生成可能不正確的String。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.