I am trying to build a WSDL-first java web-service using CXF2.7.7 using MTOM.
My intention is to be able to upload large (multi GB) files through this
web-serviceBelow is a fragment of my the WSDL                                   
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                               
My intention is to use MTOM ( as it would be evident from the element 
type="xs:base64Binary" xmime:expectedContentTypes="application/octet-stream)
for uploading objects through this service.I have also configured my jax WS
end-point to use MTOM as seen from my Server side Spring configuration file
fragment below                                                                  
                        And
similarly I have also configured my jax-ws client to use MTOM as seen from
my client side spring configuration file below                                  
                                                                                
                
And I am also including a relevant fragment of my Java code for client below    
/* ---      Web-service client    
***************************************************************************
*/    package com.example.objectstoreservice.client;    import
java.util.List;    import java.awt.Image;    import
java.io.ByteArrayInputStream;    import java.io.File;      import
java.io.InputStream;    import java.io.File;    import
java.io.FileInputStream;    import java.io.IOException;    import
javax.activation.DataHandler;    import javax.activation.FileDataSource;   
import javax.xml.namespace.QName;     import
com.example.objectstoreservice.ObjectStoreService;    import
com.example.objectstoreservice.ObjectReqParam;    import
com.example.objectstoreservice.ObjectRespParam;    public final class
ObjectStoreServiceTester {        ObjectStoreService objectStoreService;       
public ObjectStoreService getObjectStoreService() {        return
objectStoreService;    }    public void
setObjectStoreService(ObjectStoreService objectStoreService) {       
this.objectStoreService = objectStoreService;    }    public void
testObjectStoreService()     {          System.out.println("Now uploading a data
file to  service");                             ObjectReqParam objReqParam = 
new ObjectReqParam() ;     
objReqParam.setObjName("File");                String
fileName="C:/root/opt/files/ToSend.jpg";                FileDataSource
inFileDataSource=new FileDataSource(fileName);          DataHandler dataHandler 
=
new DataHandler(inFileDataSource);              System.out.println("Check 
content-type
from dataHandler : " + dataHandler.getContentType());   
System.out.println("Check obj signature from dataSource : " +
dataHandler.getDataSource());           System.out.println("Check file-name from
dataSource : " + dataHandler.getDataSource().getName());                        
objReqParam.setObjData(dataHandler);            System.out.println("Now 
uploading
file:" + fileName);             objectStoreService.uploadObject(objReqParam);   
System.out.println("Object upload successful");                             }   
}When run - this
client runs fine for small attachments, but  gives following error for large
attachments ( based on my JVM heap space allocated)  **  An exception
occured while executing the Java class. null: InvocationTargetException:
Java heap space  ** Below is the full stack trace. **Please let me know if
you see something amiss or if I should be doing something different ***- And
BTW   I have seen some other posts with similar problems and am wondering if
anyone has done MTOM for large files.Is there a way I can explicitly force
it to stream the file or force it to send in small chunks ?  *    MTOM: An
exception occured while executing the Java class. null    at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor   
.java:217)            at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor   
.java:153)            at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor   
.java:145)        at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje   
ct(LifecycleModuleBuilder.java:84)        at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje   
ct(LifecycleModuleBuilder.java:59)        at
org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu    
ild(LifecycleStarter.java:183)        at
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl   
eStarter.java:161)        at
org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)        at
org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)        at
org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)        at
org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)        at
org.apache.maven.cli.MavenCli.main(MavenCli.java:141)        at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.   
java:57)        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces   
sorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)     
  
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun   
cher.java:290)        at
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav   
a:230)        at
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La   
uncher.java:409)        at
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:   
352)    Caused by: org.apache.maven.plugin.MojoExecutionException: An
exception occured    while executing the Java class. null        at
org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:346)        at
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default   
BuildPluginManager.java:101)        at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor   
.java:209)        ... 19 more    Caused by:
java.lang.reflect.InvocationTargetException        at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.   
java:57)        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces   
sorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)     
  
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:291)       
at java.lang.Thread.run(Thread.java:744)    Caused by:
java.lang.OutOfMemoryError: Java heap space        at
com.sun.xml.bind.v2.util.ByteArrayOutputStreamEx.readFrom(ByteArrayOu   
tputStreamEx.java:75)        at
com.sun.xml.bind.v2.runtime.unmarshaller.Base64Data.get(Base64Data.ja   
va:196)        at
com.sun.xml.bind.v2.runtime.unmarshaller.Base64Data.writeTo(Base64Dat   
a.java:312)        at
com.sun.xml.bind.v2.runtime.output.UTF8XmlOutput.text(UTF8XmlOutput.j   
ava:312)        at
com.sun.xml.bind.v2.runtime.XMLSerializer.leafElement(XMLSerializer.j   
ava:356)        at
com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$PcdataImpl.   
writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:183)        at
com.sun.xml.bind.v2.runtime.MimeTypedTransducer.writeLeafElement(Mime   
TypedTransducer.java:96)        at
com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTrans   
ducedAccessorImpl.writeLeafElement(TransducedAccessor.java:256)        at
com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.serial   
izeBody(SingleElementLeafProperty.java:130)        at
com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBean   
InfoImpl.java:361)        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerialize   
r.java:696)        at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serial   
izeBody(SingleElementNodeProperty.java:158)        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Eleme   
ntBeanInfoImpl.java:161)        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Eleme   
ntBeanInfoImpl.java:131)        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(Element   
BeanInfoImpl.java:333)        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Element   
BeanInfoImpl.java:340)        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Element   
BeanInfoImpl.java:76)        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.j   
ava:494)        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:   
323)        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.jav   
a:251)        at
javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshal   
lerImpl.java:95)        at
org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder   
.java:612)        at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja   
va:240)        at
org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:169)       
at org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writePar   
ts(AbstractOutDatabindingInterceptor.java:114)        at
org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutIn   
terceptor.java:68)        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept   
orChain.java:272)        at
org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:565)        at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:474)        at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:377)        at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:330)        at
org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)And
another peculiar thing If I check the SOAP message I still see the
attachment going "inline" as base64 encoded and not as a separate part ...
at-least the CXF logging shows that to me. This is regardless of the size of
attachment I try to send 



--
View this message in context: 
http://cxf.547215.n5.nabble.com/WSDL-first-MTOM-enabled-cxf-2-7-web-service-client-causes-Java-heap-space-error-for-large-attachments-tp5738387.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to