spring-cloud-rsocket icon indicating copy to clipboard operation
spring-cloud-rsocket copied to clipboard

Composite metatdata with JS client not working properly

Open nofelkad opened this issue 5 years ago • 0 comments

I am using Spring Boot: 2.2.3.RELEASE

Rsocket springboot server throws an exception for routing metadata which is part of composite metadata

java.lang.IndexOutOfBoundsException: readerIndex(1) + length(105) exceeds writerIndex(23): UnpooledSlicedByteBuf(ridx: 1, widx: 23, cap: 23/23, unwrapped: PooledUnsafeDirectByteBuf(ridx: 0, widx: 231, cap: 231))
	at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1495)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.MonoError] :
	reactor.core.publisher.Mono.error(Mono.java:281)
	io.rsocket.RSocketResponder.requestResponse(RSocketResponder.java:199)
Error has been observed at the following site(s):
	|_ Mono.error ⇢ at io.rsocket.RSocketResponder.requestResponse(RSocketResponder.java:199)
Stack trace:
		at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1495)
		at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1478)
		at io.netty.buffer.AbstractByteBuf.readSlice(AbstractByteBuf.java:894)
		at io.rsocket.metadata.TaggingMetadata$1.next(TaggingMetadata.java:47)
		at io.rsocket.metadata.TaggingMetadata$1.next(TaggingMetadata.java:37)
		at org.springframework.messaging.rsocket.DefaultMetadataExtractor.extractEntry(DefaultMetadataExtractor.java:136)
		at org.springframework.messaging.rsocket.DefaultMetadataExtractor.extract(DefaultMetadataExtractor.java:115)
		at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.createHeaders(MessagingRSocket.java:195)
		at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:167)
		at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.requestResponse(MessagingRSocket.java:122)
		at io.rsocket.RSocketResponder.requestResponse(RSocketResponder.java:193)
		at io.rsocket.RSocketResponder.handleFrame(RSocketResponder.java:299)

with js client with composite metadata

     this.socket
         .requestResponse({
           data:  Buffer.from(JSON.stringify(scannerReq)),
           metadata: encodeAndAddWellKnownMetadata(
                           encodeAndAddCustomMetadata(
                             Buffer.alloc(0),
                             TEXT_PLAIN.string,
                             Buffer.from('Hello World')
                          ),
                          
                           MESSAGE_RSOCKET_ROUTING,
                          Buffer.from('irl.user.location.user1')
                     )
         })

i have incorporated this changes as well.

Thanks.

nofelkad avatar Jan 22 '20 06:01 nofelkad