2013-06-21 6 views
3

나는 CXF의 웹 서비스에 큰 첨부 파일을 보내고 나는 다음과 같은 예외가 얻을 :에 의한com.ctc.wstx.exc.WstxParsingException : 텍스트 크기 제한

을 : javax.xml.bind.UnmarshalException - 연결된 예외가있는 경우 [com.ctc.wstx.exc.WstxParsingException : [행, col {unknown-source}]의 텍스트 크기 제한 (134217728)이 을 초과했습니다 : [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.unc.edu. java.security.AccessController.doPrivileged (기본 방법)에서 org.apache.cxf.jaxb.JAXBEncoderDecoder $ 1.run (JAXBEncoderDecoder.java:797) 에서 cxf.jaxb.JAXBEncoderDecoder.access $ 50 (JAXBEncoderDecoder.java:94) org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall (JAXBEncoderDecoder.java:795) ... 더 (25)이 문제는

0123을 말한다 Woodstox 라이브러리에서 온 것 같다

텍스트 크기 제한 (134,217,728)이

를 초과

누군가가이 제한을 증가시킬 수 있는지 알고 있습니까? 그렇다면 어떻게해야합니까?

답변

4

그런 식으로 woodstox에서 오는 경우 MTOM 첨부 파일로 보내지 않습니다. 필자가 제안한 첫 번째 제안은 MTOM을 XML 구문 분석 밖에서 처리 할 수 ​​있도록 MTOM으로 뒤집는 것입니다. 우리는 그것을 입력 스트림이나 유사한 것으로 유지할 수 있고 메모리에 있지 않아도 훨씬 효율적입니다.

XML로 유지하려면 "org.apache.cxf.stax.maxTextLength"속성을 좀 더 큰 값으로 설정할 수 있습니다. 이런 식으로 stax 파서에서 들어오는 내용은 String이나 byte []로 메모리에 저장되므로 메모리를 소비합니다.

+0

좋아요! 고마워. 마지막으로, "org.apache.cxf.stax.maxTextLength"속성을 주어진 값으로 설정하려면 어떻게해야합니까? -Dorg.apache.cxf.stax.maxTextLength = X 시스템 속성을 사용하면됩니까? – Laurent

+2

표준 Stax 속성 메커니즘 인'XMLInputFactory.setProperty()'를 사용하십시오. 이 기능은 DoS (Denial of Service) 공격을 방지하기 위해 Woodstox 4.2에 추가되었습니다. 기본값은 Woodstox (이 경우 CXF)를 사용하는 프레임 워크에 따라 다릅니다. – StaxMan