当前位置: 首页 > 知识库问答 >
问题:

Spring集成解组变压器Jaxb2Marshaller性能问题

杨凌
2023-03-14

目前,我们的应用程序没有利用spring集成提供的xml转换器。相反,它创建一个JaxbContext,然后从该JaxbContext创建一个JAXB解组器/封送器池,并将其连接到服务活动器中。我们创建池是为了不产生为每个操作创建封送器和解封送器的成本。

作为重构工作的一部分,我们决定使用xml变压器。在尝试实现时,我们发现org.spring.oxm.封送器实现不支持封送器/反封送器的池,因为Spring集成的反封送器期望和实现org.spring.oxm.封送器。org.spring.oxm.Marshaller的每个实现在调用散集方法时都会创建一个新的javax.xml.bind.Unmarshaller

最后,我为我的问题提供了足够的背景。为每个解组操作创建新的解组器是否不是性能问题?根据jaxbri文档,它确实会影响性能。作为反驳,jaxb项目的一位领导指出,它们是轻量级的

共有2个答案

宋望
2023-03-14

您可以安全地重用JAXBContext,但我从未见过MarshallerUnmarshaller实例是线程安全和/或可重用的保证。

这本质上意味着不能保证池封送器/解封送器是安全的。这将是一个充分的理由,不把它们集中起来。

我也怀疑这在很大程度上是一种性能提升。封送拆收器/解封拆收器保持当前的封送拆收状态,因此重用封送拆收器/解封拆收器不会节省太多。

沈畅
2023-03-14

也许,一个好主意是将封送器迁移到java。对不同的对象和验证处理程序使用Marshaller真的很麻烦,而且是最消耗内存的怪物之一。

 类似资料:
  • 在下面的问题上,我可以得到一些帮助吗:调用transformer将输入对象转换为Map对象并调用处理程序,处理程序缺少之前添加的头值。为什么要将有效负载转换为映射对象,以丢失所有标头? 如果转换不是map,则标头中没有问题。 谢了湿婆

  • 上面的代码可以工作,客户端得到“处理请求中的错误”,服务器日志中有一个条目“Timeout exception is through”。但我在日志中也看到以下异常: MyTransformer的实现似乎不正确。 你能帮我定制变压器吗?如何在转换方法中获得有效负载,这样我就可以回复客户机作为‘处理请求的错误。有效载荷='+有效载荷? 非常感谢Artem的完美解决方案。

  • 我正在使用与Spring集成。我有一个入站网关web服务,当有人调用它时,它将自动解析为JAXB生成的类。 但是当我调试到源代码中时,我看到使用DOM的。我认为它会使用SAX将XML数据绑定到Java对象,SAX更快。为什么默认情况下使用DOM?如何将其配置为使用SAX? 当我检查文件时 解组器需要源的实例。如果消息负载不是源的实例,将尝试转换。当前为字符串、文件和组织。w3c。多姆。支持文档有效

  • null 如何在transform()步骤中添加Jaxb2Marshaller?

  • 尝试从Web运行示例spring-integration mqtt项目。我已经在根上下文中导入了mqtt-context。部署war之后,我将运行runmqtt.java文件。但会遇到以下问题。如果在独立模式下运行,相同的文件不会产生任何问题。 mqtt-context.xml http://www.springframework.org/schema/integration http://www