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