繁体   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