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

问题描述:

我送一个大附件的CXF web服务,我得到以下异常:com.ctc.wstx.exc.WstxParsingException:文本大小限制

产生的原因:javax.xml.bind.UnmarshalException - 带有链接的异常: [com.ctc.wstx.exc.WstxParsingException:文本大小限制(134217728)在[row,col {unknown-source}]处超出 :[1,134855131]] at com.sun.xml .bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362) at com.un.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339) at org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:769) at org.apache。 cxf.jaxb.JAXBEncoderDecoder.access $ 100(JAXBEncoderDecoder.java:94) 在org.apache.cxf.jaxb.JAXBEncoderDecoder $ 1.run(JAXBEncoderDecoder.java:797) 在java.security.AccessController.doPrivileged(本机方法) 在org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:795) ...... 25多个

这个问题似乎来自Woodstox库说

文字大小限制(134217728)超过

是否有人知道这是否可以增加此限制?如果是的话,该怎么办?

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

如果您想保留在XML中,您可以将属性“org.apache.cxf.stax.maxTextLength”设置为更大的值。请记住,像这样从stax解析器进来的东西在内存中保存为字符串或字节[],因此会消耗内存。

+0

太棒了!非常感谢。最后一件事,如果我想将属性“org.apache.cxf.stax.maxTextLength”设置为给定值,我该怎么做?使用系统属性-Dorg.apache.cxf.stax.maxTextLength = X会工作吗? – Laurent

+2

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