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 >
