-
-
Notifications
You must be signed in to change notification settings - Fork 819
Closed
Description
I am able to reproduce the following bug using jackson-core-2.10.3
:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.filter.FilteringGeneratorDelegate;
import com.fasterxml.jackson.core.filter.TokenFilter;
import com.fasterxml.jackson.core.util.JsonGeneratorDelegate;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringReader;
public class JacksonTest {
private static class NullExcludingTokenFilter extends TokenFilter {
private static final NullExcludingTokenFilter INSTANCE =
new NullExcludingTokenFilter();
@Override
public boolean includeNull() {
return false;
}
}
private static class StringTruncatingGeneratorDelegate
extends JsonGeneratorDelegate {
private final int maxStringLength;
private StringTruncatingGeneratorDelegate(
JsonGenerator jsonGenerator,
int maxStringLength) {
super(jsonGenerator);
this.maxStringLength = maxStringLength;
}
@Override
public void writeString(String text) throws IOException {
if (text == null) {
writeNull();
} else if (maxStringLength <= 0 || maxStringLength >= text.length()) {
super.writeString(text);
} else {
StringReader textReader = new StringReader(text);
super.writeString(textReader, maxStringLength);
}
}
@Override
public void writeFieldName(String name) throws IOException {
if (maxStringLength <= 0 || maxStringLength >= name.length()) {
super.writeFieldName(name);
} else {
String truncatedName = name.substring(0, maxStringLength);
super.writeFieldName(truncatedName);
}
}
}
@Test
public void test() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
JsonFactory jsonFactory = objectMapper.getFactory();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(outputStream);
jsonGenerator = new FilteringGeneratorDelegate(
jsonGenerator, NullExcludingTokenFilter.INSTANCE, true, true);
int maxStringLength = 10;
jsonGenerator = new StringTruncatingGeneratorDelegate(
jsonGenerator, maxStringLength);
jsonGenerator.writeStartObject();
jsonGenerator.writeFieldName("message");
jsonGenerator.writeString("1234567890!");
jsonGenerator.writeEndObject();
jsonGenerator.flush();
String json = outputStream.toString("US-ASCII");
Assertions.assertThat(json).isEqualTo("{\"message\":\"1234567890\"}");
// org.junit.ComparisonFailure:
// Expected :"{"message":"1234567890"}"
// Actual :""1234567890""
}
}
Metadata
Metadata
Assignees
Labels
No labels