JAXB Маршаллер инициализация - PullRequest
1 голос
/ 19 декабря 2011

Мне нужно маршалировать объект JAXB в строку формата xml. Я использую SLSB и подключаю код для создания Marshaller и других вещей в аннотированном методе @PostConstruct. Так что каждый раз мне не нужно загружать схему и создавать маршаллера.

Код в @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, самый быстрый способ вернуть то же самое?).

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Я не знаю другого способа маршаллинга / демаршаллинга с JAXB.Когда у меня возникла та же проблема, я проверил код CXF, и он был таким же.

См. Производительность JAXB и безопасность потоков

1 голос
/ 19 декабря 2011

Не имеет прямого отношения к вашему вопросу, но ByteArrayOutputStream # toString () будет использовать кодировку символов платформы по умолчанию, а не кодировку, используемую JAXB при создании документа XML.В зависимости от ваших дальнейших планов использования XML-документа, может быть лучше сохранить его в виде байтового массива, а не пытаться создать из него потенциально неправильную строку.

...