com.ctc.wstx.exc.WstxParsingException: ограничение размера текста

Я отправляю большое вложение в веб-службу CXF и получаю следующее исключение:

Вызвано: javax.xml.bind.UnmarshalException — со связанным исключением: [com.ctc.wstx.exc.WstxParsingException: превышен предел размера текста (134217728) в [строке, столбце {неизвестный источник}]: [1,134855131] ] в com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426) в com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362 ) в com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339) в org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:769) в 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)

Кто-нибудь знает, можно ли увеличить этот лимит? если да, то как сделать?


person Laurent    schedule 21.06.2013    source источник


Ответы (1)


Если он поступает из woodstox таким образом, то вы не отправляете его как вложение MTOM. Мое первое предложение состояло бы в том, чтобы переключить его на MTOM, чтобы его можно было обрабатывать вне синтаксического анализа XML. Гораздо эффективнее, поскольку мы можем сохранить его как входной поток или что-то подобное, а не хранить его в памяти.

Если вы хотите сохранить его в XML, вы можете установить для свойства: «org.apache.cxf.stax.maxTextLength» большее значение. Имейте в виду, что вещи, поступающие от синтаксического анализатора stax, подобные этому, хранятся в памяти либо как String, либо как byte[] и, таким образом, потребляют память.

person Daniel Kulp    schedule 21.06.2013
comment
Большой! Большое спасибо. И последнее, если я хочу установить для свойства org.apache.cxf.stax.maxTextLength заданное значение, как мне это сделать? использование системного свойства -Dorg.apache.cxf.stax.maxTextLength=X будет работать? - person Laurent; 21.06.2013
comment
Используйте стандартный механизм свойств Stax: XMLInputFactory.setProperty(). Эта функция была добавлена ​​в Woodstox 4.2, чтобы помочь предотвратить атаки типа «отказ в обслуживании»: значения по умолчанию зависят от платформы, которая использует Woodstox (в данном случае CXF). - person StaxMan; 24.06.2013