JAXB使用Woodstox解析器来提高性能?

ano*_*mys 4 java parsing jaxb woodstox

是否可以切换本机解析器,我认为它基于Java反射.我们遇到了一些性能问题,并想知道我们是否可以切换实现.

您的建议非常感谢.

附加信息:这是继承的代码,我们需要修复Web服务中的性能问题.我正在寻找性能提升而无需更改代码.现有代码使用JAXB来编组和解组通过CXF(wsdl到java)生成的java对象.

我的目标是将实现切换到sTax,然后使用Woodstox库.

bdo*_*han 9

如果您的JAXB实现通过标准JAXP API使用StAX解析器,那么将Woodstox jar 添加到类路径应该会导致您的JAXB impl使用Woodstox.通过这样做,您应该看到性能提升.

由于Woodstox jar包含以下条目,因此将其添加到类路径将允许JAXP API返回它的实例:

  • META-INF /服务/ javax.xml.stream.XMLInputFactory
  • META-INF /服务/ javax.xml.stream.XMLOuputFactory

注意:我领导EclipseLink JAXB(MOXy),MOXy使用StAX解析器.其他JAXB实现(Metro,JaxMe)可能做同样的事情.

  • 实际上我站得更正(想想肯定jdk jaxb使用了stax).jdk jaxb impl(至少在jdk 6中)使用SAX. (3认同)
  • 如果您解组从Woodstox创建的XMLStreamReader,您应该获得所需的行为,而不管使用的JAXB实现如何. (2认同)
  • 默认的JDK Stax impl实际上是Sun的SJSXP,而不是Xerces.对于阅读来说,它可以接近woodstox速度,但在某些情况下存在显着差异,尤其是小文件.最大的区别在于写作,SJSXP(由于某种原因)非常慢.要确保的一件事是始终重用XMLInputFactory(没有这个,Woodstox会做很多不必要的一次性工作).另一个有用的事情是始终关闭XMLStreamReader,-Writers.这些有很大的不同. (2认同)