native1989
native1989

Reputation: 95

Java error stacktrace accumulation

I develop smpp client, when i receive InvalidResponseException time after time, my stacktrace increase:

org.jsmpp.extra.NegativeResponseException: Negative response 0000000f found
    at org.jsmpp.session.AbstractSession.validateResponse(AbstractSession.java:162)
    at org.jsmpp.session.AbstractSession.executeSendCommand(AbstractSession.java:203)
    at org.jsmpp.session.SMPPSession.sendBind(SMPPSession.java:143)
    at org.jsmpp.session.SMPPSession.connectAndBind(SMPPSession.java:86)
    at com.sms.client.gw.Gateway.newSession(Gateway.java:107)
    at com.sms.client.gw.Gateway.getSession(Gateway.java:81)
    at com.sms.client.gw.Gateway.access$300(Gateway.java:33)
    at com.sms.client.gw.Gateway$SessionStateListenerImpl.onStateChange(Gateway.java:196)
    at org.jsmpp.session.AbstractSessionContext.fireStateChanged(AbstractSessionContext.java:69)
    at org.jsmpp.session.SMPPSessionContext.changeState(SMPPSessionContext.java:44)
    at org.jsmpp.session.AbstractSessionContext.close(AbstractSessionContext.java:58)
    at org.jsmpp.session.SMPPSessionContext.close(SMPPSessionContext.java:10)
    at org.jsmpp.session.AbstractSession.close(AbstractSession.java:141)

then stacktrace was increase:

org.jsmpp.extra.NegativeResponseException: Negative response 0000000f found
    at org.jsmpp.session.AbstractSession.validateResponse(AbstractSession.java:162)
    at org.jsmpp.session.AbstractSession.executeSendCommand(AbstractSession.java:203)
    at org.jsmpp.session.SMPPSession.sendBind(SMPPSession.java:143)
    at org.jsmpp.session.SMPPSession.connectAndBind(SMPPSession.java:86)
    at com.sms.client.gw.Gateway.newSession(Gateway.java:107)
    at com.sms.client.gw.Gateway.getSession(Gateway.java:81)
    at com.sms.client.gw.Gateway.access$300(Gateway.java:33)
    at com.sms.client.gw.Gateway$SessionStateListenerImpl.onStateChange(Gateway.java:196)
    at org.jsmpp.session.AbstractSessionContext.fireStateChanged(AbstractSessionContext.java:69)
    at org.jsmpp.session.SMPPSessionContext.changeState(SMPPSessionContext.java:44)
    at org.jsmpp.session.AbstractSessionContext.close(AbstractSessionContext.java:58)
    at org.jsmpp.session.SMPPSessionContext.close(SMPPSessionContext.java:10)
    at org.jsmpp.session.AbstractSession.close(AbstractSession.java:141)
    at org.jsmpp.session.SMPPSession.connectAndBind(SMPPSession.java:100)
    at com.sms.client.gw.Gateway.newSession(Gateway.java:107)
    at com.sms.client.gw.Gateway.getSession(Gateway.java:81)
    at com.sms.client.gw.Gateway.access$300(Gateway.java:33)
    at com.sms.client.gw.Gateway$SessionStateListenerImpl.onStateChange(Gateway.java:196)
    at org.jsmpp.session.AbstractSessionContext.fireStateChanged(AbstractSessionContext.java:69)
    at org.jsmpp.session.SMPPSessionContext.changeState(SMPPSessionContext.java:44)
    at org.jsmpp.session.AbstractSessionContext.close(AbstractSessionContext.java:58)
    at org.jsmpp.session.SMPPSessionContext.close(SMPPSessionContext.java:10)
    at org.jsmpp.session.AbstractSession.close(AbstractSession.java:141)
    at org.jsmpp.session.SMPPSession$EnquireLinkSender.run(SMPPSession.java:394)

and larger and larger. How it can be? Why stacktrace accumulate ? Between the response I set SMPPSessionContext variable to null, and SMPPSession to null

Upvotes: 1

Views: 1571

Answers (1)

Marko Topolnik
Marko Topolnik

Reputation: 200158

As far as I can see, there is a listener to the close session event that tries to open a new session. At the same time, the connectAndBind method, when detecting failure, tries to close the session, triggering yet another recursive cycle. So stop doing that, stop trying to open a session inside the close event callback (that's your class Gateway$SessionStateListenerImpl).

Upvotes: 1

Related Questions