我需要將JAXB對象編組爲xml格式字符串。我正在使用SLSB並掛鉤代碼以創建Marshaller
和其他東西,並在@PostConstruct
註釋的方法中使用。這樣每次我不需要加載模式並創建Marshaller。JAXB 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格式,最快的方法返回相同的?)。
感謝
將初始化代碼連接到@PostConstruct不會導致任何問題?我的意思是會話在連續調用期間混合,如果要編組的對象作爲參數傳遞? – nobody 2011-12-19 14:34:17
檢查提供的鏈接。我認爲這可能會爲您的問題提供更好的答案。 – AValchev 2011-12-19 14:39:36