В моем проекте CF я работаю с AWS Java 2.0 SDK и пытаюсь реализовать асинхронную c многочастную загрузку, но у меня возникают проблемы с настройкой. в частности, при создании BiConsumer Interface
.
Документов: createMultipartUpload (CreateMultipartUploadRequest createMultipartUploadRequest)
Чтобы начать этот процесс, мне нужно вызвать a3AsyncInterface.createMultipartUpload()
, и поэтому я создаю CreateMultipartUploadRequest
возьмите объект и передайте этот объект в мой вызов:
oCreateMultipartUploadRequest = createObject( 'java', 'software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest' ).builder()
.bucket( ARGUMENTS.bucket )
.key( ARGUMENTS.key )
.contentType( ARGUMENTS.fileMimeType )
.build();
oCreateMultipartUploadResponse = s3AsyncInterface.createMultipartUpload( oCreateMultipartUploadRequest );
Так что пока все это прекрасно работает. Мой вызов возвращает объект ответа типа CompletableFuture<CreateMultipartUploadResponse>
, но здесь он начинает разваливаться.
Из CompletableFuture
я хочу вызвать его .whenComplete()
метод, но я не могу понять, как чтобы сделать это успешно.
Метод .whenComplete()
принимает объект типа BiConsumer<? super T,? super Throwable>
( docs ), и я не могу понять, как создать этот объект. BiConsumer - это интерфейс Java, поэтому он не имеет конструктора. Я могу создать объект без проблем, но это, похоже, не обрезает его.
oBiConsumer = createObject( 'java', 'java.util.function.BiConsumer' );
Я не могу вызвать метод .accept( t, u )
для этого объекта BiConsumer, потому что я не настроил его правильно Я думаю. Это .andThen()
метод, использующий другой объект BiConsumer, так что мне все еще нужно выяснить это сначала, как кажется.
Так что я думаю, что хочу сделать в Coldfusion, что-то вроде этого (пример в Java):
BiConsumer< List<Integer>, List<Integer> > equals = ( list1, list2 ) ->
{
if ( list1.size() != list2.size() ) {
System.out.println( 'False' );
} else {
for ( int i = 0; i < list1.size(); i++ ) {
if ( list1.get( i ) != list2.get( i ) ) {
System.out.println( 'False' );
return;
}
}
System.out.println( 'True' );
}
};
equals.accept( lista, listb );
Не уверен, нужно ли мне даже вызывать метод .accept()
правильно или как-то вызывать его, когда я передаю свои аргументы в .whenComplete()
. Возможно, я все-таки ошибаюсь в этом конкретном действии c, но это нормально, я могу понять это тогда, когда доберусь туда. Я все еще хочу выяснить, как правильно настроить объект BiConsumer, это, кажется, популярный шаблон в Java, и я хочу иметь возможность работать с ним.
То, что я хотел бы иметь возможность сделать что-то вроде этого:
oBiConsumer = createObject( 'java', 'java.util.function.BiConsumer<T, U>' );
Но это, кажется, не поддерживается, и я не уверен, есть ли другой синтаксис для выполнения sh того же самого.
Я понял, что могу go в будущем создать динамический c прокси и собственный .jar для создания / построения этой функциональности, но разве это единственный путь вперед? Я бы предпочел не делать этого, если это возможно; воняет, чтобы поддерживать.
Любые предложения будут оценены.