code: @DoesServiceRequest
      public void uploadServiceProperties(final ServiceProperties properties, QueueRequestOptions options,
              OperationContext opContext) throws StorageException {
          if (!Utility.isNullOrEmpty(properties.getDefaultServiceVersion())) {
              throw new IllegalArgumentException(SR.DEFAULT_SERVICE_VERSION_ONLY_SET_FOR_BLOB_SERVICE);
          }
  
          if (opContext == null) {
              opContext = new OperationContext();
          }
  
          opContext.initialize();
          options = QueueRequestOptions.populateAndApplyDefaults(options, this);
  
          Utility.assertNotNull("properties", properties);
  
          ExecutionEngine.executeWithRetry(this, null,
                  this.uploadServicePropertiesImpl(properties, options, opContext, false),
                  options.getRetryPolicyFactory(), opContext);
      }
docs: Uploads a new {@link ServiceProperties} configuration to the given storage service. This includes Logging,
  HourMetrics, MinuteMetrics and CORS configurations.
  
  @param properties
  The {@link ServiceProperties} to upload.
  @param options
  A {@link BlobRequestOptions} object that specifies any additional options for the request. Specifying
  <code>null</code> will use the default request options from the associated service client (
  {@link CloudBlobClient}).
  @param opContext
  An {@link OperationContext} object that represents the context for the current operation. This object
  is used to track requests to the storage service, and to provide additional runtime information about
  the operation.
  @throws StorageException
  If a storage service error occurred.