FasterXML / FasterXML/jackson-dataformats-binary

Avro "single-object encoding" decoding fail: `JsonParseException: Invalid length indicator for String: -98`

オープン
#343 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
avro has-failing-test
主要言語
Java
スター
347
フォーク
156
平均マージ
3日 3時間
マージ済み PR(30日)
22

説明

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?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。