spring-attic / spring-cloud-rsocket

This repository is now inactive. Please see https://github.com/rsocket-routing/
https://github.com/rsocket-routing/
Apache License 2.0
49 stars 13 forks source link

Composite metatdata with JS client not working properly #11

Open nofelkad opened 4 years ago

nofelkad commented 4 years ago

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.