diff --git a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/DefaultAcsClient.java b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/DefaultAcsClient.java index e61bb8c5e4..49fb154ac0 100644 --- a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/DefaultAcsClient.java +++ b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/DefaultAcsClient.java @@ -72,7 +72,16 @@ public DefaultAcsClient(String regionId) throws ClientException { } public DefaultAcsClient(IClientProfile profile) { - this(profile, new StaticCredentialsProvider(profile)); + this.clientProfile = profile; + AlibabaCloudCredentialsProvider provider = profile.getCredentialsProvider(); + if (provider != null) { + this.credentialsProvider = provider; + } else { + this.credentialsProvider = new StaticCredentialsProvider(profile); + } + this.httpClient = HttpClientFactory.buildClient(profile); + this.endpointResolver = new DefaultEndpointResolver(this, profile); + this.appendUserAgent("HTTPClient", this.httpClient.getClass().getSimpleName()); } public DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentials credentials) { diff --git a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/ICredentialProvider.java b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/ICredentialProvider.java index 45ce46826a..09527dc3d8 100644 --- a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/ICredentialProvider.java +++ b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/ICredentialProvider.java @@ -1,8 +1,11 @@ package com.aliyuncs.auth; @Deprecated +/** + * @Deprecated : Use AlibabaCloudCredentialsProvider instead of this + */ public interface ICredentialProvider { - Credential fresh(); + Credential fresh(); } diff --git a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/DefaultProfile.java b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/DefaultProfile.java index 78f78cd5a3..6edb06d5c8 100644 --- a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/DefaultProfile.java +++ b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/DefaultProfile.java @@ -15,6 +15,7 @@ public class DefaultProfile implements IClientProfile { private String regionId = null; private FormatType acceptFormat = null; private ICredentialProvider icredential = null; + private volatile AlibabaCloudCredentialsProvider credentialsProvider = null; private Credential credential; private String certPath; private HttpClientConfig httpClientConfig = HttpClientConfig.getDefault(); @@ -50,6 +51,10 @@ public synchronized static DefaultProfile getProfile() { return profile; } + /** + * @deprecated : Use DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentialsProvider credentialsProvider) instead of this + */ + @Deprecated public synchronized static DefaultProfile getProfile(String regionId, ICredentialProvider icredential) { profile = new DefaultProfile(regionId, icredential); return profile; @@ -72,7 +77,7 @@ public synchronized static DefaultProfile getProfile(String regionId) { } /** - * @Deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this + * @deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this */ @Deprecated public synchronized static void addEndpoint(String endpointName, String regionId, String product, String domain) { @@ -80,7 +85,7 @@ public synchronized static void addEndpoint(String endpointName, String regionId } /** - * @Deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this + * @deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this */ @Deprecated public synchronized static void addEndpoint(String endpointName, String regionId, String product, String domain, @@ -104,6 +109,11 @@ public synchronized FormatType getFormat() { return acceptFormat; } + @Override + public AlibabaCloudCredentialsProvider getCredentialsProvider() { + return credentialsProvider; + } + @Override public synchronized Credential getCredential() { if (null == credential && null != icredential) { @@ -118,12 +128,17 @@ public ISigner getSigner() { return null; } + + /** + * @deprecated : Use DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentialsProvider credentialsProvider) instead of this + */ @Override + @Deprecated public void setCredentialsProvider(AlibabaCloudCredentialsProvider credentialsProvider) { - if (credential != null) { - return; + if (credential == null) { + credential = new CredentialsBackupCompatibilityAdaptor(credentialsProvider); } - credential = new CredentialsBackupCompatibilityAdaptor(credentialsProvider); + this.credentialsProvider = credentialsProvider; } @Override diff --git a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/IClientProfile.java b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/IClientProfile.java index 6ad6e8371f..788c7126bf 100644 --- a/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/IClientProfile.java +++ b/aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/IClientProfile.java @@ -10,7 +10,7 @@ public interface IClientProfile { /** - * @Deprecated : Use Signer.getSigner(AlibabaCloudCredentials credentials) instead of this + * @deprecated : Use Signer.getSigner(AlibabaCloudCredentials credentials) instead of this */ @Deprecated ISigner getSigner(); @@ -19,8 +19,10 @@ public interface IClientProfile { FormatType getFormat(); + AlibabaCloudCredentialsProvider getCredentialsProvider(); + /** - * @Deprecated : Use AlibabaCloudCredentialsProvider getCredentials() instead of this + * @deprecated : Use AlibabaCloudCredentialsProvider getCredentials() instead of this */ @Deprecated Credential getCredential(); @@ -28,8 +30,9 @@ public interface IClientProfile { /** * This method exists because ClientProfile holds too much modules like endpoint management * - * @param credentialsProvider + * @deprecated : Use DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentialsProvider credentialsProvider) instead of this */ + @Deprecated void setCredentialsProvider(AlibabaCloudCredentialsProvider credentialsProvider); /** diff --git a/aliyun-java-sdk-core/src/test/java/com/aliyuncs/DefaultAcsClientTest.java b/aliyun-java-sdk-core/src/test/java/com/aliyuncs/DefaultAcsClientTest.java index 6b12516575..ea2997b6d0 100644 --- a/aliyun-java-sdk-core/src/test/java/com/aliyuncs/DefaultAcsClientTest.java +++ b/aliyun-java-sdk-core/src/test/java/com/aliyuncs/DefaultAcsClientTest.java @@ -89,6 +89,17 @@ public void testConstructorWithProfileAndCredentials() { Assert.assertTrue(profile == client.getProfile()); } + @Test + public void testConstructorWithProfileAndCredentialsProvider() throws NoSuchFieldException, IllegalAccessException { + DefaultProfile profile = mock(DefaultProfile.class); + STSAssumeRoleSessionCredentialsProvider provider = mock(STSAssumeRoleSessionCredentialsProvider.class); + when(profile.getCredentialsProvider()).thenReturn(provider); + DefaultAcsClient client = new DefaultAcsClient(profile); + Field field = client.getClass().getDeclaredField("credentialsProvider"); + field.setAccessible(true); + Assert.assertTrue(field.get(client) instanceof STSAssumeRoleSessionCredentialsProvider); + } + @SuppressWarnings("deprecation") @Test public void testGetSetHttpClient() { diff --git a/aliyun-java-sdk-core/src/test/java/com/aliyuncs/profile/DefaultProfileTest.java b/aliyun-java-sdk-core/src/test/java/com/aliyuncs/profile/DefaultProfileTest.java index 0532e6237d..5dba32120c 100644 --- a/aliyun-java-sdk-core/src/test/java/com/aliyuncs/profile/DefaultProfileTest.java +++ b/aliyun-java-sdk-core/src/test/java/com/aliyuncs/profile/DefaultProfileTest.java @@ -43,6 +43,16 @@ public void testGetCredential() { assertTrue(profile.getCredential() == credential); } + @Test + public void testGetCredentialsProvider() { + DefaultProfile profile = DefaultProfile.getProfile("regionId"); + assertNull(profile.getCredentialsProvider()); + StaticCredentialsProvider credentialsProvider = mock(StaticCredentialsProvider.class); + profile.setCredentialsProvider(credentialsProvider); + assertTrue(profile.getCredentialsProvider() instanceof StaticCredentialsProvider); + assertTrue(profile.getCredential() instanceof Credential); + } + @Test public void getRegionId() { DefaultProfile profile = DefaultProfile.getProfile("regionId"); diff --git a/java-sdk-function-test/src/test/java/com/aliyuncs/APIEncapsulateTest.java b/java-sdk-function-test/src/test/java/com/aliyuncs/APIEncapsulateTest.java index 1dcb7f077f..acbbdbfba4 100644 --- a/java-sdk-function-test/src/test/java/com/aliyuncs/APIEncapsulateTest.java +++ b/java-sdk-function-test/src/test/java/com/aliyuncs/APIEncapsulateTest.java @@ -39,9 +39,16 @@ public void rdsRequestTest() throws ClientException { public void cdnRequestTest() throws ClientException { DescribeCdnCertificateDetailRequest request = new DescribeCdnCertificateDetailRequest(); request.setCertName("cdnRequestTest"); - DescribeCdnCertificateDetailResponse response = this.client.getAcsResponse(request); - Assert.assertNotNull(response); - Assert.assertNotNull(response.getRequestId()); +// DescribeCdnCertificateDetailResponse response = this.client.getAcsResponse(request); +// Assert.assertNotNull(response); +// Assert.assertNotNull(response.getRequestId()); + try { + this.client.getAcsResponse(request); + Assert.fail(); + } catch (ClientException e) { + Assert.assertEquals("InvaildParameter", e.getErrCode()); + Assert.assertEquals("The parameter you provided is invalid.", e.getErrMsg()); + } } @Test