java - JAXB 编码器初始化

标签 java xml xml-serialization jaxb marshalling

我需要将 JAXB 对象编码为 xml 格式的字符串。我正在使用 SLSB 并 Hook 代码以在 @PostConstruct 注释方法中创建 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 Performance and Thread safety

关于java - JAXB 编码器初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8562442/

相关文章:

Java Comparator 类对数组进行排序

java - libgdx 创建的项目无法在 Android 上运行

python - 在django中解析xml文件

java - Eclipse 中的 "import java.beans.XMLEncoder"问题

c# - 保存文件 - xmlSerializer

c# - XmlSerializer。跳过 xml 未知节点

java - RxJava2 由于分支逻辑而丢失结果

java - 如何在 Android Studio 中从 Onclick() 获取字符串值到 onSaveInstanceState()

PHP:对 XML 的 AJAX 请求

java - 根据 xml 模式验证 xml 文件