You probably need to use a stream instead of loading all of the attachments
into RAM prior to delivery.

On Fri, Nov 16, 2018 at 12:36 PM David Karlsen <[email protected]>
wrote:

> I'm struggling with outofmemory exception when using the following:
>
>
> public Response upload( String token, File file ) {
>     FsDepot fsDepot = getApi();
>     Attachment attachment = new AttachmentBuilder()
>         .mediaType( "application/gzip" )
>         .contentDisposition( new ContentDisposition( "form-data;
> name=\"data\" ; filename=\"" + file.getName() + "\"" ) )
>         .object( file )
>         .build();
>
>     Attachment tokenAttachment = new AttachmentBuilder()
>         .object( token )
>         .contentDisposition( new ContentDisposition( "form-data;
> name=\"token\"" ) )
>         .mediaType( MediaType.TEXT_PLAIN )
>         .build();
>
>     MultipartBody multipartBody = new MultipartBody( Arrays.asList(
> attachment, tokenAttachment ) );
>
>     return fsDepot.upload( multipartBody.getAllAttachments() );
> }
>
>
> protected <T> T getApi( Class<T> clazz, int timeoutInSeconds, URL
> apiBaseAddress, boolean verbose ) {
>     List providers = Arrays.asList( new MultipartProvider(), new
> FormEncodingProvider<>() );
>
>     LoggingFeature loggingFeature = new LoggingFeature(null, null,
> 64000, false, false);
>     T t = JAXRSClientFactory.create( apiBaseAddress.toExternalForm(),
> clazz, providers, verbose ?
>             Collections.singletonList( loggingFeature ):
>             Collections.emptyList(),
>             null );
>     ClientConfiguration clientConfiguration = WebClient.getConfig( t );
>     clientConfiguration.getRequestContext().put(
> Message.MAINTAIN_SESSION, Boolean.TRUE );
>
>     HTTPConduit httpConduit = clientConfiguration.getHttpConduit();
>     TLSClientParameters tlsClientParameters = new TLSClientParameters();
>     tlsClientParameters.setDisableCNCheck( true );
>     tlsClientParameters.setTrustManagers( new TrustManager[]{new
> TrustAllTrustManager()});
>     httpConduit.setTlsClientParameters( tlsClientParameters );
>     HTTPClientPolicy httpClientPolicy = httpConduit.getClient();
>
>     httpClientPolicy.setAllowChunking( false );
>     httpClientPolicy.setConnection( ConnectionType.KEEP_ALIVE );
>     httpClientPolicy.setConnectionTimeout( TimeUnit.SECONDS.toMillis( 2 )
> );
>     //have higher timeout on network than towards ADCM
>     httpClientPolicy.setReceiveTimeout( TimeUnit.SECONDS.toMillis(
> timeoutInSeconds + 10 ) );
>     httpClientPolicy.setAutoRedirect( false );
>     httpConduit.setClient( httpClientPolicy );
>
>     return t;
> }
>
>
> --
> --
> David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen
>

Reply via email to