AuthenticationDetailsProvider provider = SimpleAuthenticationDetailsProvider.builder()
.tenantId(oci_tenant_id)
.userId(oci_user_id)
.region(Region.AF_JOHANNESBURG_1)
.fingerprint(oci_finger_print)
.privateKeySupplier((Supplier) privateKeySupplier)
.build();
ObjectStorage ociClient = new ObjectStorageClient(provider);
从上面我在创建时得到以下异常:
ObjectStorage ociClient = new ObjectStorageClient(provider);
Exception in thread "main" java.lang_.NoSuchFieldError Create breakpoints: TOO_MANY_REQUESTS
at com.oracle.bmc.circuitbreaker.CircuitBreakerConfiguration.(CircuitBreakerConfiguration.java:44)
at com.oracle.bmc.util.CircuitBreakerUtils.(CircuitBreakerUtils.java:35)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:317)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:224)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:187)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:152)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:124)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:99)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:76)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:62)
at com.oracle.bmc.objectstorage.ObjectStorageClient.(ObjectStorageClient.java:51)
at com.vodacom.oci.services.OCI_GenericUtility.getObjectClient(OCI_GenericUtility.java:137)
at com.vodacom.oci.services.OCI_GenericUtility.main(OCI_GenericUtility.java:47)
您能分享一下您项目根目录下
mvn dependency:tree
的输出吗?看起来依赖项 jakarta.ws.rs:jakarta.ws.rs-api
没有指向正确的版本 (2.1.6
) 或者被 javax.ws.rs:javax.ws.rs-api
覆盖。要解决此问题,您的项目中应仅包含 jakarta.ws.rs:jakarta.ws.rs-api
版本 2.1.6
。
我从 pom.xml 中删除了 aws-java-sdk* 依赖项,并且我的代码有效。看起来 oci-java-sdk 和 aws-java-sdk 依赖项之间存在冲突。以下依赖项已删除,异常消失了
<!-- <dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.908</version>
</dependency>-->
<!--<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.908</version>
</dependency>-->
我有同样的错误,只需两个 Maven 依赖项即可重现:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-hdfs-connector</artifactId>
<version>3.3.1.0.3.6</version>
</dependency>
有一个旧的 jar 与 jakarta 冲突,我发现这个有相同的类:
javax.ws.rs:jsr311-api:jar:1.1.1:compile
一旦排除,错误就消失了 排除它的简单方法,添加对其父项 jersey-core 的直接依赖,然后从中排除:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
对于我来说,在一个同时依赖于 AWS 和 Oracle SDK 的项目中,通过添加此依赖项来解决冲突
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
OCI SDK 依赖于“rs-api”>= 2.1,因为它包含一个常量
Response.Status.TOO_MANY_REQUESTS
,其 Javadoc 文档中有 @since 2.1
。