FasterXML / FasterXML/jackson-dataformats-binary
Avro "single-object encoding" decoding fail: `JsonParseException: Invalid length indicator for String: -98`
- Dominant language
- Java
- Stars
- 347
- Forks
- 156
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 22
Description
I have created a very simple avro schema file:
```
{
"name":"SampleRecordDto",
"type":"record",
"namespace":"com.api.jsonata4java.avro.v1",
"fields":[
{
"name":"name",
"type":"string"
}
]
}
```
Then generating a SampleRecordDto file from this using the following avro-maven-plugin.
```
org.apache.avro
avro-maven-plugin
1.8.2
generate-sources
schema
${project.basedir}/src/main/avro/
${project.build.directory}/generated-sources/avro/
```
After then using jackson-dataformat-avro to convert an object of class SampleRecodDto to JSONNode using the following code:
```
package com.api.jsonata4java.test.expressions;
import com.api.jsonata4java.avro.v1.SampleRecordDto;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.dataformat.avro.AvroMapper;
import com.fasterxml.jackson.dataformat.avro.AvroSchema;
import org.apache.avro.Schema;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
public class AvroTest {
private static final AvroMapper avroMapper = new AvroMapper();
public static void main(String[] args) throws IOException {
SampleRecordDto sampleRecordDto = SampleRecordDto.newBuilder()
.setName("apm")
.build();
JsonNode jsonNode = decode(sampleRecordDto.getSchema(), sampleRecordDto.toByteBuffer().array());
System.out.println(jsonNode);
}
public static JsonNode decode(Schema schema, byte[] message) {
try (InputStream input = new ByteArrayInputStream(message)) {
return avroMapper.reader(new AvroSchema(schema)).readTree(input);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
```
But I am running into the following exception:
```
Exception in thread "main" java.io.UncheckedIOException: com.fasterxml.jackson.core.JsonParseException: Invalid length indicator for String: -98
at com.api.jsonata4java.test.expressions.AvroTest.decode(AvroTest.java:31)
at com.api.jsonata4java.test.expressions.AvroTest.main(AvroTest.java:22)
Caused by: com.fasterxml.jackson.core.JsonParseException: Invalid length indicator for String: -98
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2418)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:749)
at com.fasterxml.jackson.dataformat.avro.deser.JacksonAvroParserImpl.decodeString(JacksonAvroParserImpl.java:574)
at com.fasterxml.jackson.dataformat.avro.deser.JacksonAvroParserImpl.decodeStringToken(JacksonAvroParserImpl.java:565)
at com.fasterxml.jackson.dataformat.avro.deser.ScalarDecoder$StringReader$FR.readValue(ScalarDecoder.java:317)
at com.fasterxml.jackson.dataformat.avro.deser.RecordReader$Std.nextToken(RecordReader.java:142)
at com.fasterxml.jackson.dataformat.avro.deser.AvroParserImpl.nextToken(AvroParserImpl.java:97)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer._deserializeContainerNoRecursion(JsonNodeDeserializer.java:539)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:98)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:23)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectReader._bindAsTree(ObjectReader.java:2149)
at com.fasterxml.jackson.databind.ObjectReader._bindAndCloseAsTree(ObjectReader.java:2117)
at com.fasterxml.jackson.databind.ObjectReader.readTree(ObjectReader.java:1794)
at com.api.jsonata4java.test.expressions.AvroTest.decode(AvroTest.java:29)
```
Can I please get some help on this?
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.