FuelSDK-Java icon indicating copy to clipboard operation
FuelSDK-Java copied to clipboard

[BUG] Can't create Asset

Open ypiel-talend opened this issue 10 months ago • 1 comments

Describe the bug We can't create Asset since we can't set AssetType.

To Reproduce We tried this code:

ETAsset asset = new ETAsset();
asset.setName("Asset Test 1");
asset.setContent("Asset Test 1 content");
asset.setContentType("text/plain");

ETResponse<ETAsset> etAssetETResponse = client.create(asset);

And this issue is returned:

{"message":"Request contained some validation errors.","errorcode":10006,"documentation":"","validationErrors":[{"message":"You must provide a valid AssetType for the Asset.","errorcode":118075,"documentation":""}]}

We also tried with a direct HTTP call. We have the same issue if AssetType is not set, but successful with this code:

String payload = """
        {
          "Name": "Asset 1",
          "AssetType": {
            "Id": 1
          },
          "Data": {
            "message": "A message"
          }
        }
""";

String rest_endpoint = this.getConf().get("endpoint") + "asset/v1/content/assets";

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(rest_endpoint))
        .header("Content-Type", "application/json")
        .header("Authorization", "Bearer " + token)
        .POST(HttpRequest.BodyPublishers.ofString(payload, StandardCharsets.UTF_8))
        .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

Expected behavior There is no ETAssetType attribute in ETAsset, but it is mandatory to create an Asset.

Environment

  • Fuel SDK Version 1.6.0
  • Java/ JDK version 11

The bug has the severity

  • [x] Critical: The defect affects critical functionality or critical data. It does not have a workaround.
  • [ ] Major: The defect affects major functionality or major data. It has a workaround but is not obvious and is difficult.
  • [ ] Minor: The defect affects minor functionality or non-critical data. It has an easy workaround.
  • [ ] Trivial: The defect does not affect functionality or data. It does not even need a workaround. It does not impact productivity or efficiency. It is merely an inconvenience.

Additional context Add any other context about the problem here.

ypiel-talend avatar Aug 30 '23 15:08 ypiel-talend

We have created a sub class to fix it successfully:

@Data
@RestObject(path = "/asset/v1/content/assets",
        primaryKey = "id",
        collection = "items",
        totalCount = "count")
public class ETAssetFixed extends ETAsset {

    @Expose
    @ExternalName("AssetType")
    private AssetType assetType = null;

    @Data
    public static class AssetType {

        @Expose
        @ExternalName("id")
        private int id;

    }
}

And then:

       ETAssetFixed.AssetType assetType = new ETAssetFixed.AssetType();
        assetType.setId(2);

        ETAssetFixed asset = new ETAssetFixed();
        asset.setName("Asset Test 1");
        asset.setContent("Asset Test 1 content");
        asset.setContentType("text/plain");
        asset.setAssetType(assetType);

        ETResponse<ETAsset> etAssetETResponse = client.create(asset);

Works well.

ypiel-talend avatar Aug 30 '23 15:08 ypiel-talend