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!