Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Commit payload deserialization produces an exception #8

Open
csanadtelbisz opened this issue Jun 21, 2022 · 0 comments · May be fixed by #9
Open

Commit payload deserialization produces an exception #8

csanadtelbisz opened this issue Jun 21, 2022 · 0 comments · May be fixed by #9

Comments

@csanadtelbisz
Copy link

SysML v2 API Java client version: 2021-09 (commit: Merge branch 'release/2021-09' on Oct 15, 2021)

Steps to reproduce:

  • Using the api client, create a project and a commit with some SysMLv2 element (e.g. with type ActionDefinition).
  • Send a request to get the created commit (use getCommitByProjectAndId method with the id of the created project and commit).

The following simple project reproduces the problem: api-client-bug-report.zip. Essential part:

val projectApi = ProjectApi(defaultClient)
val commitApi = CommitApi(defaultClient)
// ...
val project = projectApi.postProject(Project().apply { name = "demo project" })
val commit = commitApi.postCommitByProject(project.atId, Commit().apply {
    change = listOf(DataVersion().apply {
        val id = UUID.randomUUID()
        identity = DataIdentity().atId(id)
        payload = Data().apply {
            put("@id", id.toString())
            put("@type", "ActionDefinition")
            put("empty", Random.nextBoolean())
        }
    })
}, null)
commitApi.getCommitByProjectAndId(project.atId, commit.atId) // Exception: cannot determine model class of name: <ActionDefinition>

Expected output: the result of the getCommitByProjectAndId request is a Commit object with the appropriate content.

Actual output: an exception: IllegalArgumentException: cannot determine model class of name: <ActionDefinition>

Additional info: the stacktrace reveals (see below) that the exception occurs in the getClassByDiscriminator method of JSON.java when trying to deserialize the response (more specifically when the payload of the commit change is deserialized). The source of the problem is that the @type property of the payload is used to determine the class for the result of the deserialization. The type (e.g. ActionDefinition) is searched in a hash map which only contains the key Data in our case (see the creation of the hash map).

Exception in thread "main" java.lang.IllegalArgumentException: cannot determine model class of name: <ActionDefinition>
	at org.omg.sysml.JSON.getClassByDiscriminator(JSON.java:96)
	at org.omg.sysml.JSON.access$100(JSON.java:44)
	at org.omg.sysml.JSON$1.getClassForElement(JSON.java:69)
	at io.gsonfire.gson.TypeSelectorTypeAdapterFactory$TypeSelectorTypeAdapter.read(TypeSelectorTypeAdapterFactory.java:65)
	at io.gsonfire.gson.NullableTypeAdapter.read(NullableTypeAdapter.java:36)
	at io.gsonfire.gson.HooksTypeAdapter.deserialize(HooksTypeAdapter.java:86)
	at io.gsonfire.gson.HooksTypeAdapter.read(HooksTypeAdapter.java:54)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
	at com.google.gson.Gson.fromJson(Gson.java:932)
	at com.google.gson.Gson.fromJson(Gson.java:897)
	at com.google.gson.Gson.fromJson(Gson.java:846)
	at org.omg.sysml.JSON.deserialize(JSON.java:163)
	at org.omg.sysml.ApiClient.deserialize(ApiClient.java:775)
	at org.omg.sysml.ApiClient.handleResponse(ApiClient.java:978)
	at org.omg.sysml.ApiClient.execute(ApiClient.java:905)
	at org.omg.sysml.api.CommitApi.getCommitByProjectAndIdWithHttpInfo(CommitApi.java:168)
	at org.omg.sysml.api.CommitApi.getCommitByProjectAndId(CommitApi.java:144)
	at MainKt.main(Main.kt:43)
	at MainKt.main(Main.kt)
@csanadtelbisz csanadtelbisz linked a pull request Jun 22, 2022 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant