code: public CMAAsset create(String spaceId, String environmentId, CMAAsset asset) {
      assertNotNull(spaceId, "spaceId");
      assertNotNull(environmentId, "environmentId");
      assertNotNull(asset, "asset");
  
      final String assetId = asset.getId();
  
      final CMASystem sys = asset.getSystem();
      asset.setSystem(null);
  
      try {
        if (assetId == null) {
          return service.create(spaceId, environmentId, asset).blockingFirst();
        } else {
          return service.create(spaceId, environmentId, assetId, asset).blockingFirst();
        }
      } finally {
        asset.setSystem(sys);
      }
    }
docs: Create a new Asset.
  <p>
  In case the given {@code asset} has an ID associated with it, that ID will be used,
  otherwise the server will auto-generate an ID that will be contained in the response upon
  success.
  <p>
  This method will override the configuration specified through
  {@link CMAClient.Builder#setSpaceId(String)} and
  {@link CMAClient.Builder#setEnvironmentId(String)}.
  
  @param spaceId       Space ID
  @param environmentId Environment ID
  @param asset         Asset
  @return {@link CMAAsset} result instance
  @throws IllegalArgumentException if asset is null.
  @throws IllegalArgumentException if asset space id is null.
  @throws IllegalArgumentException if asset environment id is null.