You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by baeschtu baeschtu <ba...@gmail.com> on 2010/06/15 15:15:30 UTC

Re: Out of memory when sending files (MTOM, inlining, JDK 1.6)

Hello List
I have a webservice with ws-security and would like to up/download files. (I
followed this howto http://www.jroller.com/gmazza/entry/cxf_x509_profile)
I also added the <property name="allowMTOM" value="true"/> for the
WSS4JOutInterceptor. It works for 40MB files but when trying to upload a
120MB file I got the following exception.

14:35:52,010  INFO SecurityTokenReference:562 - X509IssuerSerial alias:
myservicekey
14:35:52,195  INFO SecurityTokenReference:562 - X509IssuerSerial alias:
myclientkey
2010-06-15 14:36:00 WARNING Interceptor has thrown exception, unwinding now

java.lang.OutOfMemoryError: Java heap space
    0
com.sun.xml.bind.v2.util.ByteArrayOutputStreamEx.readFrom(ByteArrayOutputStreamEx.java:71)
    1
com.sun.xml.bind.v2.runtime.unmarshaller.Base64Data.get(Base64Data.java:189)
    2
com.sun.xml.bind.v2.runtime.unmarshaller.Base64Data.length(Base64Data.java:218)
    3
com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.text(ValidatingUnmarshaller.java:109)
    4
com.sun.xml.bind.v2.runtime.unmarshaller.MTOMDecorator.startElement(MTOMDecorator.java:103)
    5
com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:71)
    6
com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:242)
    7
com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:176)
    8
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
    9
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
   10
org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:646)
   11
org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:533)
   12 org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)
   13
org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:188)
   14
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
   15
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104)
   16
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
   17
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:392)
   18
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:170)
   19
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
   20
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:45)
   21 javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   22
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:101)
   23
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   24
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   25
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   26
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   27
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   28
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   29
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   30
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   31 org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)

org.apache.cxf.interceptor.Fault: Unmarshalling Error: Java heap space
    0
org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:668)
    1
org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:533)
    2 org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)
    3
org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:188)
    4
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
    5
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104)
    6
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
    7
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:392)
    8
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:170)
    9
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
   10
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:45)
   11 javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   12
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:101)
   13
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   14
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   15
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   16
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   17
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   18
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   19
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   20
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   21 org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
   22 org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
   23 org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
   24
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
   25
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
   26
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
   27 java.lang.Thread.run(Thread.java:619)


- Bastian





2010/4/30 Steve T/V <st...@hotmail.com>

>
> Thanks to Dan, we got attachments working and the initial result, at least,
> shows no OutOfMemory exceptions!
>
> The solution was a little different than he described in the code excerpt,
> since it was the WSS4JOutInterceptor (not the "In" interceptor) and we had
> the client configuration in Java, but it was enough to point us in the
> right
> direction.  Here's the relevant change that can be matched up with our code
> already posted:
>
>        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
>         wssOut.setAllowMTOM(true);
>        cxfEndpoint.getOutInterceptors().add(wssOut);
>
> Thanks again.  Your response saved us a lot of time.
>
> Regards,
>
> Steve
>
>
> dkulp wrote:
> >
> >
> > By default, the WSS4JOutInterceptor turns off MTOM since the attachments
> > would
> > not be signed/encrypted.   Basically, it takes the "secure" route.
> >
> > You can tell it to not do that by:
> >
> > <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
> > <constructor-arg>
> > ....
> > </contructor-arg>
> > <property name="allowMTOM" value="true"/>
> > ....
> >
> > Dan
> >
> > --
> > Daniel Kulp
> > dkulp@apache.org
> > http://dankulp.com/blog
> >
> >
>
> --
> View this message in context:
> http://old.nabble.com/Out-of-memory-when-sending-files-%28MTOM%2C-inlining%2C-JDK-1.6%29-tp28394078p28412640.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>
>

Re: Out of memory when sending files (MTOM, inlining, JDK 1.6)

Posted by Daniel Kulp <dk...@apache.org>.
Do you also have schema-validation turned on?   It kind of seems like yes.   
That MAY be a problem.  When JAXB validates, it sucks the entire MTOM thing 
into a byte[] to send to the validator.   That's a JAXB thing that we cannot 
really do anything about.   :-(

Dan

 

On Tuesday 15 June 2010 9:15:30 am baeschtu baeschtu wrote:
> Hello List
> I have a webservice with ws-security and would like to up/download files.
> (I followed this howto
> http://www.jroller.com/gmazza/entry/cxf_x509_profile) I also added the
> <property name="allowMTOM" value="true"/> for the WSS4JOutInterceptor. It
> works for 40MB files but when trying to upload a 120MB file I got the
> following exception.
> 
> 14:35:52,010  INFO SecurityTokenReference:562 - X509IssuerSerial alias:
> myservicekey
> 14:35:52,195  INFO SecurityTokenReference:562 - X509IssuerSerial alias:
> myclientkey
> 2010-06-15 14:36:00 WARNING Interceptor has thrown exception, unwinding now
> 
> java.lang.OutOfMemoryError: Java heap space
>     0
> com.sun.xml.bind.v2.util.ByteArrayOutputStreamEx.readFrom(ByteArrayOutputSt
> reamEx.java:71) 1
> com.sun.xml.bind.v2.runtime.unmarshaller.Base64Data.get(Base64Data.java:189
> ) 2
> com.sun.xml.bind.v2.runtime.unmarshaller.Base64Data.length(Base64Data.java:
> 218) 3
> com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.text(Valida
> tingUnmarshaller.java:109) 4
> com.sun.xml.bind.v2.runtime.unmarshaller.MTOMDecorator.startElement(MTOMDec
> orator.java:103) 5
> com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(I
> nterningXmlVisitor.java:71) 6
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartEle
> ment(StAXStreamConnector.java:242) 7
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStr
> eamConnector.java:176) 8
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unmars
> hallerImpl.java:360) 9
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unmarsh
> allerImpl.java:339) 10
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:6
> 46) 11
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:5
> 33) 12 org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)
> 13
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteral
> InInterceptor.java:188) 14
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
> n.java:236) 15
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationO
> bserver.java:104) 16
> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestinati
> on.java:98) 17
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servle
> tController.java:392) 18
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController
> .java:170) 19
> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServl
> et.java:142) 20
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPSer
> vlet.java:45) 21
> javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 22
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPSe
> rvlet.java:101) 23
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:290) 24
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) 25
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.j
> ava:233) 26
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.j
> ava:191) 27
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:12
> 8) 28
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:10
> 2) 29
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.jav
> a:109) 30
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>    31 org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
> 
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: Java heap space
>     0
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:6
> 68) 1
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:5
> 33) 2 org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128) 3
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteral
> InInterceptor.java:188) 4
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
> n.java:236) 5
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationO
> bserver.java:104) 6
> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestinati
> on.java:98) 7
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servle
> tController.java:392) 8
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController
> .java:170) 9
> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServl
> et.java:142) 10
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPSer
> vlet.java:45) 11
> javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 12
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPSe
> rvlet.java:101) 13
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
> nFilterChain.java:290) 14
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
> hain.java:206) 15
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.j
> ava:233) 16
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.j
> ava:191) 17
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:12
> 8) 18
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:10
> 2) 19
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.jav
> a:109) 20
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>    21 org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
>    22 org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
>    23 org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
>    24
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698
> ) 25
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.jav
> a:891) 26
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.ja
> va:690) 27 java.lang.Thread.run(Thread.java:619)
> 
> 
> - Bastian
> 
> 
> 
> 
> 
> 2010/4/30 Steve T/V <st...@hotmail.com>
> 
> > Thanks to Dan, we got attachments working and the initial result, at
> > least, shows no OutOfMemory exceptions!
> > 
> > The solution was a little different than he described in the code
> > excerpt, since it was the WSS4JOutInterceptor (not the "In" interceptor)
> > and we had the client configuration in Java, but it was enough to point
> > us in the right
> > direction.  Here's the relevant change that can be matched up with our
> > code
> > 
> > already posted:
> >        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
> >        
> >         wssOut.setAllowMTOM(true);
> >        
> >        cxfEndpoint.getOutInterceptors().add(wssOut);
> > 
> > Thanks again.  Your response saved us a lot of time.
> > 
> > Regards,
> > 
> > Steve
> > 
> > dkulp wrote:
> > > By default, the WSS4JOutInterceptor turns off MTOM since the
> > > attachments would
> > > not be signed/encrypted.   Basically, it takes the "secure" route.
> > > 
> > > You can tell it to not do that by:
> > > 
> > > <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
> > > <constructor-arg>
> > > ....
> > > </contructor-arg>
> > > <property name="allowMTOM" value="true"/>
> > > ....
> > > 
> > > Dan
> > > 
> > > --
> > > Daniel Kulp
> > > dkulp@apache.org
> > > http://dankulp.com/blog
> > 
> > --
> > View this message in context:
> > http://old.nabble.com/Out-of-memory-when-sending-files-%28MTOM%2C-inlinin
> > g%2C-JDK-1.6%29-tp28394078p28412640.html Sent from the cxf-user mailing
> > list archive at Nabble.com.

-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog