Hi

On Tue, Jul 5, 2011 at 10:37 AM, amazoone <[email protected]> wrote:
>
> Hello,
>
> First, excuse my English cause i'm french.
>
> I would like to create a webservice which allows a client to download a MP3.
>
> This my code :
>
>  #######
>  # Server #
>  #######
>
>         /**
>         * The Service return a MP3 converted in byte[]
>         */
>        @Produces("multipart/form-data")
>        @Multipart(value = "root", type = "application/octet-stream")
>        public byte[] getMp3() throws IOException {
>                final java.io.File fichier = new File("my_mp3");
>                final FileInputStream f = new FileInputStream(fichier);
>                return inputStreamToByteArray(f);
>        }
>
>        /**
>        * inputStreamToByteArray convert a Stream on a byte[]
>        */
>        public byte[] inputStreamToByteArray(InputStream inStream) throws
> IOException {
>            ByteArrayOutputStream baos = new ByteArrayOutputStream();
>            byte[] buffer = new byte[8192];
>            int bytesRead;
>            while ((bytesRead = inStream.read(buffer)) > 0) {
>                baos.write(buffer, 0, bytesRead);
>            }
>            return baos.toByteArray();
>        }

The above code uses JAX-RS annotations, just mentioning it given that
the client code below is JAX-WS centric.
If you do intend to have a JAXRS endpoint then consider returning
InputStream instead, or (JAX-RS) StreamingOutput.


>
>
>  ######
>  # Client #
>  ######
>
>       public static void main(String args[]) throws Exception {
>
>                final JaxWsProxyFactoryBean factory = new 
> JaxWsProxyFactoryBean();
>                factory.getInInterceptors().add(new LoggingInInterceptor());
>                factory.getOutInterceptors().add(new LoggingOutInterceptor());
>                factory.setServiceClass(AuthService.class);
>                
> factory.setAddress("http://localhost:9000/MultipartCXF/services/cxfAuth";);
>
>                final AuthService client = (AuthService) factory.create();
>                byte[] musiqueIn = client.getMp3();
>
>
>            FileOutputStream musiqueOut = null;
>            try {
>                convertByteToFile(musiqueIn, "test3.mp3");
>                } catch (IOException e) {
>                        e.printStackTrace();
>                } finally {
>                        if (musiqueOut != null) {
>                                musiqueOut.close();
>                    }
>                }
>                System.exit(0);
>        }

The above code relies on CXF JAX-WS factory bean, so I'm not sure how
it works for JPEG...
Unless you configure CXF HTTP Binding somewhere ?

Cheers, Sergey

> #######
> # RESULT#
> #######
>
> I get a Java heap space error, can someone help me ?
> Whith a JPEG it's work perfectly.
>
> Payload: <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body><ns1:getMp3Response
> xmlns:ns1="http://services.mp3server.omega.com/";><return>SUQzAwAAAANZMUdFT0IAAA[i
> cut the byte[] for the
> exemple]WIcl0huV3dtYxqQ1cZThH+2spmrYr0WFn6ta5he+znbv56uY6yta//uyAI6ABMgw1Os4wt6Z5zqtZxh
> --------------------------------------
> 5 juil. 2011 11:32:20 org.apache.cxf.phase.PhaseInterceptorChain
> doDefaultLogging
> ATTENTION: Interceptor for
> {http://services.mp3server.omega.com/}AuthServiceService#{http://services.mp3server.omega.com/}getMp3
> has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: Java heap space
>        at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:798)
>        at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:632)
>        at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:156)
>        at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
>        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>        at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:762)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1582)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1467)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1375)
>        at
> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
>        at 
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
>        at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>        at 
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623)
>        at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:510)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:343)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:295)
>        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
>        at 
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
>        at $Proxy31.getMp3(Unknown Source)
>        at com.omega.mp3server.client.Client.main(Client.java:28)
> Caused by: java.lang.OutOfMemoryError: Java heap space
>        at
> com.sun.xml.bind.DatatypeConverterImpl._parseBase64Binary(DatatypeConverterImpl.java:652)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.decodeBase64(RuntimeBuiltinLeafInfoImpl.java:879)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.access$100(RuntimeBuiltinLeafInfoImpl.java:111)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$14.parse(RuntimeBuiltinLeafInfoImpl.java:678)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$14.parse(RuntimeBuiltinLeafInfoImpl.java:681)
>        at
> com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.parse(TransducedAccessor.java:243)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:61)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:494)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.processText(StAXStreamConnector.java:334)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleEndElement(StAXStreamConnector.java:212)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:181)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
>        at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:768)
>        at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:632)
>        at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:156)
>        at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
>        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>        at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:762)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1582)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1467)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1375)
>        at
> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
>        at 
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
>        at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>        at 
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623)
>        at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:510)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:343)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:295)
> Exception in thread "main" javax.xml.ws.soap.SOAPFaultException:
> Unmarshalling Error: Java heap space
>        at 
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146)
>        at $Proxy31.getMp3(Unknown Source)
>        at com.omega.mp3server.client.Client.main(Client.java:28)
> Caused by: java.lang.OutOfMemoryError: Java heap space
>        at
> com.sun.xml.bind.DatatypeConverterImpl._parseBase64Binary(DatatypeConverterImpl.java:652)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.decodeBase64(RuntimeBuiltinLeafInfoImpl.java:879)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.access$100(RuntimeBuiltinLeafInfoImpl.java:111)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$14.parse(RuntimeBuiltinLeafInfoImpl.java:678)
>        at
> com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$14.parse(RuntimeBuiltinLeafInfoImpl.java:681)
>        at
> com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.parse(TransducedAccessor.java:243)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:61)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:494)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.processText(StAXStreamConnector.java:334)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleEndElement(StAXStreamConnector.java:212)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:181)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
>        at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)
>        at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:768)
>        at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:632)
>        at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:156)
>        at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
>        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>        at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:762)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1582)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1467)
>        at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1375)
>        at
> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
>        at 
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
>        at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>        at 
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623)
>        at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:510)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:343)
>        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:295)
>
>
>
>
> --
> View this message in context: 
> http://cxf.547215.n5.nabble.com/Download-MultiPart-Java-heap-space-tp4552691p4552691.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>

Reply via email to