Hi All,

In APIM Websocket API implementation we noticed an intermittent NPE in
org.wso2.carbon.websocket.transport.WebSocketClientHandler when the
handshake happens. Handshake completes successfully and we can continue to
send websocket frames without an issue after the NPE. We added some logs to
find the issue.
>From the logs it looks like websocket frames from the websocket server is
received before the handshake is acknowledged in WebSocketClientHandler.

Is there a workaround for this? or is this a bug?

Please check attached log files, with and without the issue.

Thanks,
Praminda

-- 

*Praminda Jayawardana*
Software Engineer
WSO2 Inc.; http://wso2.com
Mobile : +94 (0) 716 590918
[2016-11-18 16:20:37,777]  INFO - WebSocketClientHandler 
======handlePassthroughTextFrame: tenantDomain: null=======
[2016-11-18 16:20:37,777]  INFO - WebSocketClientHandler 
======getSynapseMessageContext: this.tenantDomain: null, tenantDomain: 
null=======
[2016-11-18 16:20:37,778]  INFO - WebSocketClientHandler 
======createSynapseMessageContext: tenantDomain: null=======
[2016-11-18 16:20:37,778] ERROR - WebSocketClientHandler Exception occured 
while injecting websocket frames to the Synapse engine
java.lang.NullPointerException
        at 
org.wso2.carbon.websocket.transport.WebSocketClientHandler.createSynapseMessageContext(WebSocketClientHandler.java:272)
        at 
org.wso2.carbon.websocket.transport.WebSocketClientHandler.getSynapseMessageContext(WebSocketClientHandler.java:256)
        at 
org.wso2.carbon.websocket.transport.WebSocketClientHandler.handlePassthroughTextFrame(WebSocketClientHandler.java:159)
        at 
org.wso2.carbon.websocket.transport.WebSocketClientHandler.handleWebSocketFrame(WebSocketClientHandler.java:182)
        at 
org.wso2.carbon.websocket.transport.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:241)
        at 
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
        at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244)
        at 
io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:147)
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
        at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
        at 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
        at 
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:110)
        at 
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
        at java.lang.Thread.run(Thread.java:745)
[2016-11-18 16:20:37,780]  INFO - WebSocketClientHandler 
======acknowledgeHandshake: tenantDomain: carbon.super=======
[2016-11-18 16:20:37,790]  INFO - WebSocketClientHandler 
======getSynapseMessageContext: this.tenantDomain: carbon.super, tenantDomain: 
carbon.super=======
[2016-11-18 16:20:37,790]  INFO - WebSocketClientHandler 
======createSynapseMessageContext: tenantDomain: carbon.super=======
[2016-11-18 16:20:37,791]  INFO - LogMediator To: , MessageID: 
urn:uuid:120f5385-0838-4b23-87c6-3a72b11bee47, Direction: request, MESSAGE = 
out dispatch seq, Envelope: <?xml version='1.0' 
encoding='utf-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body/></soapenv:Envelope>
[2016-11-18 16:20:37,808]  INFO - WebSocketClientHandler 
======handlePassthroughTextFrame: tenantDomain: carbon.super=======
[2016-11-18 16:20:37,809]  INFO - WebSocketClientHandler 
======getSynapseMessageContext: this.tenantDomain: carbon.super, tenantDomain: 
carbon.super=======
[2016-11-18 16:20:37,809]  INFO - WebSocketClientHandler 
======createSynapseMessageContext: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,340]  INFO - WebSocketClientHandler 
======acknowledgeHandshake: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,341]  INFO - WebSocketClientHandler 
======handlePassthroughTextFrame: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,342]  INFO - WebSocketClientHandler 
======getSynapseMessageContext: this.tenantDomain: carbon.super, tenantDomain: 
carbon.super=======
[2016-11-18 16:20:33,344]  INFO - WebSocketClientHandler 
======createSynapseMessageContext: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,344]  INFO - LogMediator To: , MessageID: 
urn:uuid:7ad5a940-19ea-40e2-b33a-151a885120bc, Direction: request, MESSAGE = 
out dispatch seq, Envelope: <?xml version='1.0' 
encoding='utf-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body/></soapenv:Envelope>
[2016-11-18 16:20:33,344]  INFO - WebSocketClientHandler 
======getSynapseMessageContext: this.tenantDomain: carbon.super, tenantDomain: 
carbon.super=======
[2016-11-18 16:20:33,347]  INFO - WebSocketClientHandler 
======createSynapseMessageContext: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,348]  INFO - LogMediator To: , MessageID: 
urn:uuid:477d11d1-a100-41e2-a406-882164763b54, Direction: request, MESSAGE = 
out dispatch seq, Envelope: <?xml version='1.0' 
encoding='utf-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body/></soapenv:Envelope>
[2016-11-18 16:20:33,373]  INFO - WebSocketClientHandler 
======handlePassthroughTextFrame: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,374]  INFO - WebSocketClientHandler 
======getSynapseMessageContext: this.tenantDomain: carbon.super, tenantDomain: 
carbon.super=======
[2016-11-18 16:20:33,374]  INFO - WebSocketClientHandler 
======createSynapseMessageContext: tenantDomain: carbon.super=======
[2016-11-18 16:20:33,375]  INFO - LogMediator To: , MessageID: 
urn:uuid:ce2d301a-4795-4cb1-9f8c-423933b58d63, Direction: request, MESSAGE = 
out dispatch seq, Envelope: <?xml version='1.0' 
encoding='utf-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body/></soapenv:Envelope>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to