簡體   English   中英

JAXB Marshaller初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM