@Generated(value="OracleSDKGenerator", comments="API Version: 20240815") public class SecurityAttributeAsyncClient extends BaseAsyncClient implements SecurityAttributeAsync
Async client implementation for SecurityAttribute service.
There are two ways to use async client: 1. Use AsyncHandler: using AsyncHandler, if the response
to the call is an InputStream
, like getObject Api in object storage service,
developers need to process the stream in AsyncHandler, and not anywhere else, because the stream
will be closed right after the AsyncHandler is invoked.
2. Use Java Future: using Java Future, developers need to close the stream after they are done
with the Java Future.
Accessing the result should be done in a mutually exclusive manner, either through the Future or
the AsyncHandler, but not both. If the Future is used, the caller should pass in null as the
AsyncHandler. If the AsyncHandler is used, it is still safe to use the Future to determine
whether or not the request was completed via Future.isDone/isCancelled.
Please refer to
https://github.com/oracle/oci-java-sdk/blob/master/bmc-examples/src/main/java/ResteasyClientWithObjectStorageExample.java
Modifier and Type | Class and Description |
---|---|
static class |
SecurityAttributeAsyncClient.Builder
Builder class for this client.
|
Modifier and Type | Field and Description |
---|---|
String |
clientCommonLibraryVersion
Compatible SDK version, provided by the codegen.
|
Optional<String> |
minimumClientCommonLibraryVersionFromClient
Minimum compatible SDK version, maybe provided by the codegen.
|
static Service |
SERVICE
Service instance for SecurityAttribute.
|
Constructor and Description |
---|
SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory)
Deprecated.
Use the
builder instead. |
SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory,
List<ClientConfigurator> additionalClientConfigurators)
Deprecated.
Use the
builder instead. |
SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory,
List<ClientConfigurator> additionalClientConfigurators,
String endpoint)
Deprecated.
Use the
builder instead. |
SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory,
Map<SigningStrategy,RequestSignerFactory> signingStrategyRequestSignerFactories,
List<ClientConfigurator> additionalClientConfigurators,
String endpoint)
Deprecated.
Use the
builder instead. |
SecurityAttributeAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider)
Deprecated.
Use the
builder instead. |
SecurityAttributeAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration)
Deprecated.
Use the
builder instead. |
SecurityAttributeAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator)
Deprecated.
Use the
builder instead. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getEndpoint, refreshClient, setEndpoint, useRealmSpecificEndpointTemplate
close
public static final Service SERVICE
Service instance for SecurityAttribute.
public final String clientCommonLibraryVersion
@Deprecated public SecurityAttributeAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)@Deprecated public SecurityAttributeAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
@Deprecated public SecurityAttributeAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
@Deprecated public SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
@Deprecated public SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory, List<ClientConfigurator> additionalClientConfigurators)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
additionalClientConfigurators
- ClientBuilderBase.additionalClientConfigurators
@Deprecated public SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory, List<ClientConfigurator> additionalClientConfigurators, String endpoint)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
additionalClientConfigurators
- ClientBuilderBase.additionalClientConfigurators
endpoint
- ClientBuilderBase.endpoint(java.lang.String)
@Deprecated public SecurityAttributeAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory, Map<SigningStrategy,RequestSignerFactory> signingStrategyRequestSignerFactories, List<ClientConfigurator> additionalClientConfigurators, String endpoint)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see SecurityAttributeAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
additionalClientConfigurators
- ClientBuilderBase.additionalClientConfigurators
endpoint
- ClientBuilderBase.endpoint(java.lang.String)
signingStrategyRequestSignerFactories
- ClientBuilderBase.signingStrategyRequestSignerFactories
public static SecurityAttributeAsyncClient.Builder builder()
Create a builder for this client.
public void setRegion(Region region)
SecurityAttributeAsync
Sets the region to call (ex, Region.US_PHOENIX_1).
Note, this will call setEndpoint
after resolving the
endpoint. If the service is not available in this region, however, an
IllegalArgumentException will be raised.
setRegion
in interface SecurityAttributeAsync
region
- The region of the service.public void setRegion(String regionId)
SecurityAttributeAsync
Sets the region to call (ex, ‘us-phoenix-1’).
Note, this will first try to map the region ID to a known Region and call setRegion
.
If no known Region could be determined, it will create an endpoint based on the default
endpoint format (Region.formatDefaultRegionEndpoint(Service, String)
and then call setEndpoint
.
setRegion
in interface SecurityAttributeAsync
regionId
- The public region ID.public Future<BulkDeleteSecurityAttributesResponse> bulkDeleteSecurityAttributes(BulkDeleteSecurityAttributesRequest request, AsyncHandler<BulkDeleteSecurityAttributesRequest,BulkDeleteSecurityAttributesResponse> handler)
SecurityAttributeAsync
Deletes the specified security attribute definitions. This operation triggers a process that removes the security attributes from all resources in your tenancy. The security attributes must be within the same security attribute namespace.
The following actions happen immediately:
After you start this operation, the state of the tag changes to DELETING, and security attribute removal from resources begins. This process can take up to 48 hours depending on the number of resources that are tagged and the regions in which those resources reside.
When all security attributes have been removed, the state changes to DELETED. You cannot restore a deleted security attribute. After the security attribute state changes to DELETED, you can use the same security attribute name again.
After you start this operation, you cannot start either the deleteSecurityAttribute
or the cascadeDeleteSecurityAttributeNamespace
operation until this process
completes.
In order to delete security attribute, you must first retire the security attribute. Use
updateSecurityAttribute
to retire a security attribute.
bulkDeleteSecurityAttributes
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<BulkEditSecurityAttributesResponse> bulkEditSecurityAttributes(BulkEditSecurityAttributesRequest request, AsyncHandler<BulkEditSecurityAttributesRequest,BulkEditSecurityAttributesResponse> handler)
SecurityAttributeAsync
Edits the specified list of security attributes for the selected resources. This operation triggers a process that edits the attributes on all selected resources. The possible actions are:
Add a security attribute when it does not already exist on the resource. * Update the value for a security attribute when it is present on the resource. * Add a security attribute when it does not already exist on the resource or update the value when it is present on the resource. * Remove a security attribute from a resource. The security attribute is removed from the resource regardless of the value.
The edits can include a combination of operations and attributes. However, multiple operations cannot apply to the same attribute in the same request.
bulkEditSecurityAttributes
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CascadingDeleteSecurityAttributeNamespaceResponse> cascadingDeleteSecurityAttributeNamespace(CascadingDeleteSecurityAttributeNamespaceRequest request, AsyncHandler<CascadingDeleteSecurityAttributeNamespaceRequest,CascadingDeleteSecurityAttributeNamespaceResponse> handler)
SecurityAttributeAsync
Deletes the specified security attribute namespace. This operation triggers a process that removes all of the security attributes defined in the specified security attribute namespace from all resources in your tenancy and then deletes the security attribute namespace.
After you start the delete operation:
New security attribute key definitions cannot be created under the namespace. * The state of the security attribute namespace changes to DELETING. * Security attribute removal from the resources begins.
This process can take up to 48 hours depending on the number of security attributes in the namespace, the number of resources that are tagged, and the locations of the regions in which those resources reside.
After all security attributes are removed, the state changes to DELETED. You cannot restore a deleted security attribute namespace. After the deleted security attribute namespace changes its state to DELETED, you can use the name of the deleted security attribute namespace again.
After you start this operation, you cannot start either the deleteSecurityAttribute
or the bulkDeleteSecurityAttributes
operation until this process completes.
To delete a security attribute namespace, you must first retire it. Use updateSecurityAttributeNamespace
to retire a security attribute namespace.
cascadingDeleteSecurityAttributeNamespace
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ChangeSecurityAttributeNamespaceCompartmentResponse> changeSecurityAttributeNamespaceCompartment(ChangeSecurityAttributeNamespaceCompartmentRequest request, AsyncHandler<ChangeSecurityAttributeNamespaceCompartmentRequest,ChangeSecurityAttributeNamespaceCompartmentResponse> handler)
SecurityAttributeAsync
Moves the specified security attribute namespace to the specified compartment within the same tenancy.
To move the security attribute namespace, you must have the manage security-attributes permission on both compartments. For more information about IAM policies, see [Details for IAM](https://docs.cloud.oracle.com/Content/Identity/policyreference/iampolicyreference.htm).
Moving a security attribute namespace moves all the security attributes contained in the security attribute namespace.
changeSecurityAttributeNamespaceCompartment
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateSecurityAttributeResponse> createSecurityAttribute(CreateSecurityAttributeRequest request, AsyncHandler<CreateSecurityAttributeRequest,CreateSecurityAttributeResponse> handler)
SecurityAttributeAsync
Creates a new security attribute in the specified security attribute namespace.
The security attribute requires either the OCID or the name of the security attribute namespace that will contain this security attribute.
You must specify a *name* for the attribute, which must be unique across all attributes in the security attribute namespace and cannot be changed. The only valid characters for security attribute names are: 0-9, A-Z, a-z, -, _ characters. Names are case insensitive. That means, for example, \"mySecurityAttribute\" and \"mysecurityattribute\" are not allowed in the same namespace. If you specify a name that's already in use in the security attribute namespace, a 409 error is returned.
The security attribute must have a *description*. It does not have to be unique, and you
can change it with updateSecurityAttribute
.
The security attribute must have a value type, which is specified with a validator. Security attribute can use either a static value or a list of possible values. Static values are entered by a user applying the security attribute to a resource. Lists are created by the user and the user must apply a value from the list. Lists are validated.
createSecurityAttribute
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateSecurityAttributeNamespaceResponse> createSecurityAttributeNamespace(CreateSecurityAttributeNamespaceRequest request, AsyncHandler<CreateSecurityAttributeNamespaceRequest,CreateSecurityAttributeNamespaceResponse> handler)
SecurityAttributeAsync
Creates a new security attribute namespace in the specified compartment.
You must specify the compartment ID in the request object (remember that the tenancy is simply the root compartment).
You must also specify a *name* for the namespace, which must be unique across all namespaces in your tenancy and cannot be changed. The only valid characters for security attribute names are: 0-9, A-Z, a-z, -, _ characters. Names are case insensitive. That means, for example, \"myNamespace\" and \"mynamespace\" are not allowed in the same tenancy. Once you created a namespace, you cannot change the name. If you specify a name that's already in use in the tenancy, a 409 error is returned.
You must also specify a *description* for the namespace. It does not have to be unique,
and you can change it with securityAttributeNamespace
.
createSecurityAttributeNamespace
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteSecurityAttributeResponse> deleteSecurityAttribute(DeleteSecurityAttributeRequest request, AsyncHandler<DeleteSecurityAttributeRequest,DeleteSecurityAttributeResponse> handler)
SecurityAttributeAsync
Deletes the specified security attribute. This operation triggers a process that removes the security attribute from all resources in your tenancy.
When you start the delete operation, the state of the security attribute changes to DELETING and security attribute removal from resources begins. This can take up to 48 hours depending on the number of resources that were tagged as well as the regions in which those resources reside.
When all attributes have been removed, the state changes to DELETED. You cannot restore a deleted attribute. Once the deleted attribute changes its state to DELETED, you can use the same security attribute name again.
After you start this operation, you cannot start either the bulkDeleteSecurityAttributes
or the cascadeDeleteTagNamespace
operation until this process completes.
To delete a security attribute, you must first retire it. Use updateSecurityAttribute
to retire a security attribute.
deleteSecurityAttribute
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteSecurityAttributeNamespaceResponse> deleteSecurityAttributeNamespace(DeleteSecurityAttributeNamespaceRequest request, AsyncHandler<DeleteSecurityAttributeNamespaceRequest,DeleteSecurityAttributeNamespaceResponse> handler)
SecurityAttributeAsync
Deletes the specified security attribute namespace. Only an empty security attribute
namespace can be deleted with this operation. To use this operation to delete a security
attribute namespace that contains security attributes, first delete all of its security
attributes. Use deleteSecurityAttribute
to delete a security attribute.
deleteSecurityAttributeNamespace
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetSecurityAttributeResponse> getSecurityAttribute(GetSecurityAttributeRequest request, AsyncHandler<GetSecurityAttributeRequest,GetSecurityAttributeResponse> handler)
SecurityAttributeAsync
Gets the specified security attribute’s information.
getSecurityAttribute
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetSecurityAttributeNamespaceResponse> getSecurityAttributeNamespace(GetSecurityAttributeNamespaceRequest request, AsyncHandler<GetSecurityAttributeNamespaceRequest,GetSecurityAttributeNamespaceResponse> handler)
SecurityAttributeAsync
Gets the specified security attribute namespace’s information.
getSecurityAttributeNamespace
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetSecurityAttributeWorkRequestResponse> getSecurityAttributeWorkRequest(GetSecurityAttributeWorkRequestRequest request, AsyncHandler<GetSecurityAttributeWorkRequestRequest,GetSecurityAttributeWorkRequestResponse> handler)
SecurityAttributeAsync
Gets details on a specified work request. The workRequestID is returned in the opc-work-request-id header for any asynchronous operation in security attributes service.
getSecurityAttributeWorkRequest
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListSecurityAttributeNamespacesResponse> listSecurityAttributeNamespaces(ListSecurityAttributeNamespacesRequest request, AsyncHandler<ListSecurityAttributeNamespacesRequest,ListSecurityAttributeNamespacesResponse> handler)
SecurityAttributeAsync
Lists the security attribute namespaces in the specified compartment.
listSecurityAttributeNamespaces
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListSecurityAttributeWorkRequestErrorsResponse> listSecurityAttributeWorkRequestErrors(ListSecurityAttributeWorkRequestErrorsRequest request, AsyncHandler<ListSecurityAttributeWorkRequestErrorsRequest,ListSecurityAttributeWorkRequestErrorsResponse> handler)
SecurityAttributeAsync
Gets the errors for a work request.
listSecurityAttributeWorkRequestErrors
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListSecurityAttributeWorkRequestLogsResponse> listSecurityAttributeWorkRequestLogs(ListSecurityAttributeWorkRequestLogsRequest request, AsyncHandler<ListSecurityAttributeWorkRequestLogsRequest,ListSecurityAttributeWorkRequestLogsResponse> handler)
SecurityAttributeAsync
Gets the logs for a work request.
listSecurityAttributeWorkRequestLogs
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListSecurityAttributeWorkRequestsResponse> listSecurityAttributeWorkRequests(ListSecurityAttributeWorkRequestsRequest request, AsyncHandler<ListSecurityAttributeWorkRequestsRequest,ListSecurityAttributeWorkRequestsResponse> handler)
SecurityAttributeAsync
Lists the security attribute work requests in compartment.
listSecurityAttributeWorkRequests
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListSecurityAttributesResponse> listSecurityAttributes(ListSecurityAttributesRequest request, AsyncHandler<ListSecurityAttributesRequest,ListSecurityAttributesResponse> handler)
SecurityAttributeAsync
Lists the security attributes in the specified namespace.
listSecurityAttributes
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<UpdateSecurityAttributeResponse> updateSecurityAttribute(UpdateSecurityAttributeRequest request, AsyncHandler<UpdateSecurityAttributeRequest,UpdateSecurityAttributeResponse> handler)
SecurityAttributeAsync
Updates the specified security attribute. You can only update description
, and isRetired
.
updateSecurityAttribute
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<UpdateSecurityAttributeNamespaceResponse> updateSecurityAttributeNamespace(UpdateSecurityAttributeNamespaceRequest request, AsyncHandler<UpdateSecurityAttributeNamespaceRequest,UpdateSecurityAttributeNamespaceResponse> handler)
SecurityAttributeAsync
Updates the specified security attribute namespace. You can’t update the namespace name.
Updating `isRetired` to 'true' retires the namespace and all the security attributes in
the namespace. Reactivating a namespace (changing `isRetired` from 'true' to 'false') does
not reactivate security attributes. To reactivate the security attributes, you must
reactivate each one individually *after* you reactivate the namespace, using updateTag
. For more information about
retiring security attribute namespaces, see [Managing Security Attribute
Namespaces](https://docs.cloud.oracle.com/Content/zero-trust-packet-routing/managing-security-attribute-namespaces.htm).
You can't add a namespace with the same name as a retired namespace in the same tenancy.
updateSecurityAttributeNamespace
in interface SecurityAttributeAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.protected ClientConfigurator getDefaultConfigurator()
public void useRealmSpecificEndpointTemplate(boolean useOfRealmSpecificEndpointTemplateEnabled)
useOfRealmSpecificEndpointTemplateEnabled
- This flag can be set to true or false to
enable or disable the use of realm-specific endpoint template respectivelypublic final void populateServiceParametersInEndpoint(String endpoint, Map<String,Object> requiredParametersMap)
endpoint
- The endpoint template in userequiredParametersMap
- Map of parameter name as key and value set in request path or
query parameter as valuepublic final void updateBaseEndpoint(String endpoint)
endpoint
- The updated endpoint to usepublic final void setEndpoint(String endpoint)
public final String getEndpoint()
public final void refreshClient()
HttpClient
. This will call ClientConfigurator
s again, and
can be used to e.g. refresh the SSL certificate.public final void close()
close
in interface AutoCloseable
public String getClientCommonLibraryVersion()
public Optional<String> getMinimumClientCommonLibraryVersionFromClient()
protected <REQ extends BmcRequest<?>,RESP extends BmcResponse,RESP_BUILDER extends BmcResponse.Builder<RESP>> ClientCall<REQ,RESP,RESP_BUILDER> clientCall(REQ request, Supplier<RESP_BUILDER> responseBuilder)
Copyright © 2016–2024. All rights reserved.