Accessing Azure Storage Blob from Payara 5.2022.5

Hi,

I am using Payara Micro version 5.2022.5 and I want to access an Azure Blob Storage.

So I added this dependency:

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-storage-blob</artifactId>
            <version>12.23.0</version>
        </dependency>

When I run my code it fails in line “client.listBlobs().forEach”:

        BlobServiceClient storageClient = new BlobServiceClientBuilder().endpoint(endpoint).credential(credential)
                .buildClient();
        BlobContainerClient client = storageClient.getBlobContainerClient(containerName);
        System.out.println("Listing blobs in the container: " + client.getBlobContainerUrl());
        client.listBlobs().forEach(blobItem -> {
            System.out.println("This is the blob name: " + blobItem.getName());
        });

Stacktrace is this:

Caused by: java.lang.NoSuchMethodError: reactor.core.publisher.MonoSink.contextView()Lreactor/util/context/ContextView;
	at reactor.netty.http.client.HttpClientConnect$HttpObserver.<init>(HttpClientConnect.java:333) ~[reactor-netty-http-1.0.33.jar:1.0.33]
	at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect.lambda$subscribe$0(HttpClientConnect.java:263) ~[reactor-netty-http-1.0.33.jar:1.0.33]
	at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:57) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:76) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57) ~[reactor-core.jar:3.4.0]
	at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect.subscribe(HttpClientConnect.java:276) ~[reactor-netty-http-1.0.33.jar:1.0.33]
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:76) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3987) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:202) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3987) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:202) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.Flux.subscribe(Flux.java:8081) ~[reactor-core.jar:3.4.0]
	at reactor.core.publisher.Flux.blockLast(Flux.java:2493) ~[reactor-core.jar:3.4.0]
	at com.azure.core.util.paging.ContinuablePagedByIteratorBase.requestPage(ContinuablePagedByIteratorBase.java:102) ~[azure-core-1.41.0.jar:1.41.0]
	at com.azure.core.util.paging.ContinuablePagedByItemIterable$ContinuablePagedByItemIterator.<init>(ContinuablePagedByItemIterable.java:75) ~[azure-core-1.41.0.jar:1.41.0]
	at com.azure.core.util.paging.ContinuablePagedByItemIterable.iterator(ContinuablePagedByItemIterable.java:55) ~[azure-core-1.41.0.jar:1.41.0]
	at com.azure.core.util.paging.ContinuablePagedIterable.iterator(ContinuablePagedIterable.java:141) ~[azure-core-1.41.0.jar:1.41.0]
	at java.lang.Iterable.forEach(Iterable.java:74) ~[?:?]

When I run the code in a standalone Java main it is working as expected.

In another post (How to update payara server dependency version?) I found that reactor-core needs to be a version > 3.4.17, but Payara Micro 5.2022.5 is shipped with v3.4.0.

So I replaced reactor-core in Payara Micro with reactor-core-3.4.19.jar.

Stacktrace is this:

Caused by: reactor.core.Exceptions$ReactiveException: javax.xml.stream.FactoryConfigurationError: Provider for javax.xml.stream.XMLInputFactory cannot be found
	at reactor.core.Exceptions.propagate(Exceptions.java:392) ~[reactor-core-3.4.19.jar:3.4.19]
	at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:97) ~[reactor-core-3.4.19.jar:3.4.19]
	at reactor.core.publisher.Flux.blockLast(Flux.java:2645) ~[reactor-core-3.4.19.jar:3.4.19]
	at com.azure.core.util.paging.ContinuablePagedByIteratorBase.requestPage(ContinuablePagedByIteratorBase.java:102) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.paging.ContinuablePagedByItemIterable$ContinuablePagedByItemIterator.<init>(ContinuablePagedByItemIterable.java:75) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.paging.ContinuablePagedByItemIterable.iterator(ContinuablePagedByItemIterable.java:55) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.paging.ContinuablePagedIterable.iterator(ContinuablePagedIterable.java:141) ~[azure-core-1.34.0.jar:1.34.0]
	at java.lang.Iterable.forEach(Iterable.java:74) ~[?:?]

And this:

Caused by: javax.xml.stream.FactoryConfigurationError: Provider for javax.xml.stream.XMLInputFactory cannot be found
	at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:320) ~[?:?]
	at javax.xml.stream.XMLInputFactory.newFactory(XMLInputFactory.java:323) ~[?:?]
	at com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(XmlFactory.java:115) ~[jackson-dataformat-xml.jar:2.13.4]
	at com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(XmlFactory.java:101) ~[jackson-dataformat-xml.jar:2.13.4]
	at com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(XmlFactory.java:85) ~[jackson-dataformat-xml.jar:2.13.4]
	at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:127) ~[jackson-dataformat-xml.jar:2.13.4]
	at com.fasterxml.jackson.dataformat.xml.XmlMapper.builder(XmlMapper.java:218) ~[jackson-dataformat-xml.jar:2.13.4]
	at com.azure.core.implementation.jackson.XmlMapperFactory.createXmlMapper(XmlMapperFactory.java:62) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.implementation.jackson.ObjectMapperFactory.createXmlMapper(ObjectMapperFactory.java:43) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.implementation.jackson.ObjectMapperShim.createXmlMapper(ObjectMapperShim.java:79) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.serializer.JacksonAdapter$GlobalXmlMapper.<clinit>(JacksonAdapter.java:40) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.serializer.JacksonAdapter.getXmlMapper(JacksonAdapter.java:306) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.serializer.JacksonAdapter.lambda$deserialize$8(JacksonAdapter.java:276) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.serializer.JacksonAdapter.useAccessHelper(JacksonAdapter.java:327) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.util.serializer.JacksonAdapter.deserialize(JacksonAdapter.java:275) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.implementation.serializer.HttpResponseBodyDecoder.deserialize(HttpResponseBodyDecoder.java:159) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.implementation.serializer.HttpResponseBodyDecoder.deserializeBody(HttpResponseBodyDecoder.java:132) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.implementation.serializer.HttpResponseBodyDecoder.decodeByteArray(HttpResponseBodyDecoder.java:75) ~[azure-core-1.34.0.jar:1.34.0]
	at com.azure.core.implementation.serializer.HttpResponseDecoder$HttpDecodedResponse.getDecodedBody(HttpResponseDecoder.java:93) ~[azure-core-1.34.0.jar:1.34.0]
	at reactor.core.publisher.Mono.lambda$mapNotNull$28(Mono.java:3429) ~[reactor-core-3.4.19.jar:3.4.19]
	at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:176) ~[reactor-core-3.4.19.jar:3.4.19]

Did anyone face this issue, too?
How can I successfully access a Azure Blob Storage from my app running inside Payara?

Thank you!