Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 有没有办法加速JAXB编组?_Xml_Jaxb_Schema_Marshalling - Fatal编程技术网

Xml 有没有办法加速JAXB编组?

Xml 有没有办法加速JAXB编组?,xml,jaxb,schema,marshalling,Xml,Jaxb,Schema,Marshalling,是否有任何方法可以加速对JAXBMarshaller.marshall(对象,输出流)的调用 我正在从事的项目是使用JAXB来[un]封送具有相当大的XML模式的对象。调用someJaxbMarshaller.marshall(results,out)需要2秒钟才能完成。其他一切(JPA抓取、空间过滤、相当多的其他逻辑)只需要大约1秒。因此,JAXB的使用使我的请求响应时间增加了三倍。我正在缓存JAXBContext和Marshaller对象,以尽可能提高速度。只是真正的编组让我慢下来了。有什么

是否有任何方法可以加速对JAXB
Marshaller.marshall(对象,输出流)
的调用

我正在从事的项目是使用JAXB来[un]封送具有相当大的XML模式的对象。调用someJaxbMarshaller.marshall(results,out)需要2秒钟才能完成。其他一切(JPA抓取、空间过滤、相当多的其他逻辑)只需要大约1秒。因此,JAXB的使用使我的请求响应时间增加了三倍。我正在缓存JAXBContext和Marshaller对象,以尽可能提高速度。只是真正的编组让我慢下来了。有什么建议吗

我使用的是jaxb2.2.3u1,它与JAX-WS 2.2.3捆绑在一起。较新的版本似乎破坏了多个方面,因此我们被锁定在该版本的JAXB中(覆盖使用JAXB 2.2.4u1的Java包括JAX-WS 2.2.5,我们不能使用它,因为它在加载时抛出
NullPointerException
)。我们也在jdk1.3.0_30上,这是在eclipseindigo中运行的。我看到了使用Woodstox的建议,但是JAX-WS2.2.3已经包含了它。我尝试用最新版本替换它,但这将编组速度降低了约0.2秒。删除Woodstox与使用JAX-WS附带的版本具有完全相同的性能


支持正在编组的对象的架构大小约为5 MB。JAXB生成的实际XML文档大小为117KB

JPA实现可能使用延迟加载(JPA部分看起来非常快,因为它推迟了实现关系的工作)。这意味着JAXB部分需要触发惰性关系(JPA完成了这项工作,JAXB看起来很慢)。几天前我考虑过这一点,所以我编写了一些嵌套循环来爬过JPA结果并获取所有的原始值(可能是强迫它“获取”它可能延迟的所有内容)。这组循环在约0.05秒内完成,封送处理时间仍然需要2到2.5秒。您将封送到哪种类型的输出流(文件访问系数是否为)?您是否在封送器上设置了架构(验证会减慢封送)?是否格式化输出(格式化比未格式化慢)?您是否指定了UTF-8以外的编码(一些JAXB实现)来优化UTF-8?我相信JAXB RI懒洋洋地初始化了一些元数据,您注意到第二个封送更快了吗?您是对的:Hibernate错了。我假设我的爬行(在JAXB编组之前)来打印所有原语将确保已经获取了所有内容。但几天前,我添加了一些注释,告诉Hibernate在那时把一切都做好,这只是将延迟从封送时间移到了预先。现在要弄清楚如何让Hibernate一次而不是零碎地获取所有内容,因为它有600多个表要处理。。。