com.ctc.wstx.exc.WstxParsingException:文本大小限制

Lau*_*ent 5 configuration web-services cxf woodstox

我正在向 CXF 网络服务发送一个大附件,但出现以下异常:

引起:javax.xml.bind.UnmarshalException - 链接异常:[com.ctc.wstx.exc.WstxParsingException:文本大小限制(134217728)在[row,col {unknown-source}]处超出:[1,134855131] ] 在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426) 在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426) ) 在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339) 在 org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:76) cxf.jaxb.JAXBEncoderDecoder.access$100(JAXBEncoderDecoder.java:94) 在 org.apache.cxf.jaxb.JAXBEncoderDecoder$1.run(JAXBEncoderDecoder.java:797) 在 java.security.AccessController。doPrivileged(Native Method) at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:795) ... 25 更多

这个问题似乎来自 Woodstox 图书馆说

超出文本大小限制 (134217728)

有人知道是否可以增加这个限制吗?如果是,怎么办?

Dan*_*ulp 6

如果它像那样来自 woodstox,那么您就不会将它作为 MTOM 附件发送。我的第一个建议是将其翻转为 MTOM,以便它可以在 XML 解析之外进行处理。效率更高,因为我们可以将其作为输入流或类似内容保留,而不将其保存在内存中。

如果要将其保留在 XML 中,可以将属性:“org.apache.cxf.stax.maxTextLength”设置为更大的值。请记住,像这样来自 stax 解析器的内容作为 String 或 byte[] 保存在内存中,因此会消耗内存。

  • 使用标准 Stax 属性机制:`XMLInputFactory.setProperty()`。Woodstox 4.2 中添加了此功能,以帮助防止拒绝服务攻击:默认值取决于使用 Woodstox 的框架(在本例中为 CXF) (2认同)