Мне нужно маршалить объект JAXB в строку формата XML. Я использую SLSB и подключаю код для создания Marshaller
и других вещей в методе комментариев @PostConstruct
. Так что каждый раз мне не нужно загружать схему и создавать Маршаллер.Инициализация Marshaller JAXB
Код в @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();
Меня беспокоит, есть ли лучший способ сделать то же самое (всякий раз, когда клиентский код хочет получить XML формат объекта JAXB, самый быстрый подход вернуть то же самое?).
Благодаря
Приобретение инициализирующего кода для @PostConstruct не вызовет никаких проблем правильно? Я имею в виду, что сеансы смешиваются во время последовательных вызовов, если объект, подлежащий сортировке, передается как параметр? – nobody
Проверьте предоставленную ссылку. Я думаю, что это, вероятно, дает лучший ответ на ваш вопрос. – AValchev