Skip to content

AbstractJackson2Decoder is only aware of jackson's non-blocking parser only supporting UTF-8 for Flux #37195

Description

@sfussenegger

The title is a bit of a hand-full, but it's basically that #24489 only implemented partial support for non-UTF-8 charsets in 4882eb2.

The added processInput(..) is only called form Flux<Object> decode(Publisher<DataBuffer>, ResolvableType, MimeType, Map<String, Object>) but not from Object decode(DataBuffer, ResolvableType, MimeType, Map<String, Object>) (the latter is also used by the implementation of Mono<Object> decodeToMono(..))

The issue can be verified by using

  • _webClient.method(method).uri(link)...retrieve().toEntityList(typeRef) -> works for "ISO-8859-1" charset
  • _webClient.method(method).uri(link)...retrieve().toEntity(typeRef) -> fails for "ISO-8859-1" charset

Here's the stack trace:

org.springframework.core.codec.DecodingException: JSON decoding error: Invalid UTF-8 middle byte 0x6d
	at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:282)
	Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Error has been observed at the following site(s):
	*__checkpoint ⇢ Body from UNKNOWN  [DefaultClientResponse]
Original Stack Trace:
		at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:282)
		at org.springframework.http.codec.json.AbstractJackson2Decoder.decode(AbstractJackson2Decoder.java:218)
		at org.springframework.http.codec.json.AbstractJackson2Decoder.lambda$decodeToMono$2(AbstractJackson2Decoder.java:198)
		at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)
		...
Caused by: com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 middle byte 0x6d
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 2, column: 21]
	at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2596)
	at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2622)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:820)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidOther(UTF8StreamJsonParser.java:3679)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidOther(UTF8StreamJsonParser.java:3686)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeUtf8_4(UTF8StreamJsonParser.java:3512)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2580)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2489)
	at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getTextCharacters(UTF8StreamJsonParser.java:446)
	at com.fasterxml.jackson.databind.util.TokenBuffer._copyBufferValue(TokenBuffer.java:1277)
	at com.fasterxml.jackson.databind.util.TokenBuffer.copyCurrentStructure(TokenBuffer.java:1215)
	at com.fasterxml.jackson.databind.DeserializationContext.bufferAsCopyOfValue(DeserializationContext.java:592)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithUnwrapped(BeanDeserializer.java:782)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:335)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
	at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2130)
	at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1500)
	at org.springframework.http.codec.json.AbstractJackson2Decoder.decode(AbstractJackson2Decoder.java:213)
	at org.springframework.http.codec.json.AbstractJackson2Decoder.lambda$decodeToMono$2(AbstractJackson2Decoder.java:198)
       ....

Metadata

Metadata

Assignees

Labels

in: webIssues in web modules (web, webmvc, webflux, websocket)status: waiting-for-triageAn issue we've not yet triaged or decided on

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions