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

As a Zeebe user, I can't deserialize records with nullable values of variables via Jackson Protocol #9382

Closed
aivinog1 opened this issue May 16, 2022 · 4 comments
Labels
kind/bug Categorizes an issue or PR as a bug

Comments

@aivinog1
Copy link
Contributor

Describe the bug

If aJobRecord has variables with nullable values, I can't deserialize it because value in the variables must not be null.

To Reproduce

  1. Get the example: https://github.com/aivinog1/zeebe-null-value-variable-issue
  2. Run the DeserializationTest
  3. Obtain the error

Expected behavior

Log/Stacktrace

Full Stacktrace

com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `io.camunda.zeebe.protocol.jackson.record.JobRecordValueBuilder$ImmutableJobRecordValue`, problem: variables value
 at [Source: (BufferedInputStream); line: 28, column: 16]
	at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
	at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1907)
	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.wrapAsJsonMappingException(StdValueInstantiator.java:587)
	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.rewrapCtorProblem(StdValueInstantiator.java:610)
	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator._createUsingDelegate(StdValueInstantiator.java:647)
	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createUsingDelegate(StdValueInstantiator.java:306)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1397)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:362)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
	at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:120)
	at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromObject(AsArrayTypeDeserializer.java:61)
	at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:263)
	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:138)
	at com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler._deserializeAndSet(ExternalTypeHandler.java:389)
	at com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler._handleTypePropertyValue(ExternalTypeHandler.java:117)
	at com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler.handleTypePropertyValue(ExternalTypeHandler.java:94)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithExternalTypeId(BeanDeserializer.java:966)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithExternalTypeId(BeanDeserializer.java:950)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithExternalTypeId(BeanDeserializer.java:943)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:360)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:230)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:197)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithExternalTypeId(BeanDeserializer.java:940)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:360)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3593)
	at io.zeebe.DeserializationTest.shouldDeserializeJobRecordWithNullableVariables(DeserializationTest.java:27)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: java.lang.NullPointerException: variables value
	at java.base/java.util.Objects.requireNonNull(Objects.java:233)
	at io.camunda.zeebe.protocol.jackson.record.JobRecordValueBuilder.putAllVariables(JobRecordValueBuilder.java:217)
	at io.camunda.zeebe.protocol.jackson.record.JobRecordValueBuilder$ImmutableJobRecordValue.fromJson(JobRecordValueBuilder.java:827)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at com.fasterxml.jackson.databind.introspect.AnnotatedMethod.call1(AnnotatedMethod.java:107)
	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator._createUsingDelegate(StdValueInstantiator.java:631)
	... 57 more

Environment:

  • OS: Mac OS and Linux
  • Zeebe Version: 1.2.11
  • Configuration: Kafka Exporter
@aivinog1 aivinog1 added the kind/bug Categorizes an issue or PR as a bug label May 16, 2022
zeebe-bors-camunda bot added a commit that referenced this issue May 30, 2022
9383: Allow nullable variable in Protocol Jackson r=oleschoenburg a=aivinog1

## Description

<!-- Please explain the changes you made here. -->
I've followed by instructions here: https://immutables.github.io/immutable.html#nulls-in-collection.

1. Created new annotation to match situations where is needed nullable values in the collection.
2. Use annotation where is applicable.
3. Created test cases to verify the fix.

## Related issues

<!-- Which issues are closed by this PR or are related -->
#9382 



Co-authored-by: Alexey Vinogradov <vinogradov.a.i.93@gmail.com>
zeebe-bors-camunda bot added a commit that referenced this issue May 30, 2022
9384: test(protocol-jackson): create test cases for nullable variable value r=oleschoenburg a=aivinog1

## Description

<!-- Please explain the changes you made here. -->
These is test cases from #9383. May be worth backport to other 

## Related issues

<!-- Which issues are closed by this PR or are related -->

#9382 



Co-authored-by: Alexey Vinogradov <vinogradov.a.i.93@gmail.com>
zeebe-bors-camunda bot added a commit that referenced this issue May 31, 2022
9465: [Backport 1.3] Allow nullable variable in Protocol Jackson r=saig0 a=aivinog1

## Description

<!-- Please explain the changes you made here. -->
This is just a backport of #9383

## Related issues

<!-- Which issues are closed by this PR or are related -->

#9382



Co-authored-by: Alexey Vinogradov <vinogradov.a.i.93@gmail.com>
zeebe-bors-camunda bot added a commit that referenced this issue Jun 1, 2022
9464: [Backport 8.0] Create test cases for nullable variable value r=saig0 a=aivinog1

## Description

Just a backport for #9384

## Related issues

<!-- Which issues are closed by this PR or are related -->

#9382



Co-authored-by: Alexey Vinogradov <vinogradov.a.i.93@gmail.com>
@aivinog1
Copy link
Contributor Author

aivinog1 commented Jun 1, 2022

Since the all PRs merged we can close this issue.

@aivinog1 aivinog1 closed this as completed Jun 1, 2022
@aivinog1
Copy link
Contributor Author

Hey @saig0 @oleschoenburg!
Honestly, I'm a little confused. I expected that the next (I mean 1.3.9) will contain the fix, but as I can see, in the release notes there is no mention of it :(

@npepinpe
Copy link
Member

Sometimes the changelog tool isn't 100% accurate. It might still be in there - just check if the changes are there in the tag 1.3.9.

@aivinog1
Copy link
Contributor Author

Thanks @npepinpe, I see it :) Sorry for the disturbance :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Categorizes an issue or PR as a bug
Projects
None yet
Development

No branches or pull requests

3 participants