Uploaded image for project: 'Axis-C++'
  1. Axis-C++
  2. AXISCPP-421

Problems with handlers

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • Client - Handlers
    • None
    • n/a

    Description

      I am investigating handlers, and there seems to be a problem with the number of times init and fini are called (I would expect, when everything is working correctly for the init and fini methods to be called once only). Also when the WSDD file contains global and transport type handlers some fini methods on some handlers are not called at all. Here is a simple WSDD with just one Client handler:-

      <?xml version="1.0" encoding="UTF-8"?>
      <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:C="http://xml.apache.org/axis/wsdd/providers/c">
      <service name="ServiceHandler" provider="CPP:DOCUMENT" description="Service Handlers">
      <requestFlow>
      <handler name="myClientHandleReq" type="C:\myClientHandler.dll">
      </handler>
      </requestFlow>
      <responseFlow>
      <handler name="myHandle1Res" type="C:\myHandler1.dll">
      </handler>
      </responseFlow>
      </service>
      </deployment>

      And this is the debug I get: (Notice how there are two calls to init)

      0> myClientHandler::myClientHandler() <-- Method entry
      0< myClientHandler::myClientHandler() <-- Method exit
      0> myClientHandler::init() <-- Method entry
      0< myClientHandler::init() <-- Method exit
      0> myClientHandler::init() <-- Method entry *** Why is this method being
      0< myClientHandler::init() <-- Method exit *** called twice?
      0> myHandler::myHandler() <-- Method entry
      0< myHandler::myHandler() <-- Method exit
      0> myHandler::init() <-- Method entry
      0< myHandler::init() <-- Method exit
      0> myHandler::init() <-- Method entry *** Why is this method being
      0< myHandler::init() <-- Method exit *** called twice?
      0> myClientHandler::invoke() <-- Method entry
      0- Before the pivot point
      0< myClientHandler::invoke() <-- Method exit
      0> myHandler::invoke() <-- Method entry
      0- After the pivot point
      0< myHandler::invoke() <-- Method exit
      0> myClientHandler::fini() <-- Method entry
      0< myClientHandler::fini() <-- Method exit
      0> myHandler::fini() <-- Method entry
      0< myHandler::fini() <-- Method exit

      Stock quote for XXX is #50.38 ($92.70) per share.

      0> myClientHandler::fini() <-- Method entry *** Why is this method being
      0< myClientHandler::fini() <-- Method exit *** called twice?
      0> myClientHandler::~myClientHandler() <-- Method entry
      0< myClientHandler::~myClientHandler() <-- Method exit
      0> myHandler::fini() <-- Method entry *** Why is this method being
      0< myHandler::fini() <-- Method exit *** called twice?
      0> myHandler::~myHandler() <-- Method entry
      0< myHandler::~myHandler() <-- Method exit

      Here is a simple WSDD of all client side handler types:-

      <?xml version="1.0" encoding="UTF-8"?>
      <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:C="http://xml.apache.org/axis/wsdd/providers/c">
      <service name="ServiceHandler" provider="CPP:DOCUMENT" description="Service Handlers">
      <requestFlow>
      <handler name="myClientHandleReq" type="C:\myClientHandler.dll">
      </handler>
      </requestFlow>
      <responseFlow>
      <handler name="myHandle1Res" type="C:\myHandler1.dll">
      </handler>
      </responseFlow>
      </service>
      <globalConfiguration name="GlobalHandler" provider="CPP:DOCUMENT" description="Global Handler">
      <requestFlow>
      <handler name="myGlobalHandleReq" type="C:\myGlobalHandler.dll">
      </handler>
      </requestFlow>
      <responseFlow>
      <handler name="myGlobalHandleRes" type="C:\myGlobalHandler.dll">
      </handler>
      </responseFlow>
      </globalConfiguration>
      <transport name="TransportHandler" provider="CPP:DOCUMENT" description="Transport Handler">
      <requestFlow>
      <handler name="myTransportHandleReq" type="C:\myTransportHandler.dll">
      </handler>
      </requestFlow>
      <responseFlow>
      <handler name="myTransportHandleRes" type="C:\myTransportHandler.dll">
      </handler>
      </responseFlow>
      </transport>
      </deployment>

      And here is the debug I get: (Notice this time that there is no call to fini or the destructor method for the following handler types: myGlobalHandler (either instance)and myTransportHandler (either instance)) I have also anotated other potential problems with comments (i.e. *** comment).

      0> myGlobalHandler::myGlobalHandler() <- Entry
      0< myGlobalHandler::myGlobalHandler() <- Exit
      0> myGlobalHandler::init() <- Entry
      0< myGlobalHandler::init() <- Exit
      0> myGlobalHandler::init() <- Entry *** Why is the init being called
      0< myGlobalHandler::init() <- Exit *** Twice?
      1> myGlobalHandler::myGlobalHandler() <- Entry
      1< myGlobalHandler::myGlobalHandler() <- Exit
      1> myGlobalHandler::init() <- Entry
      1< myGlobalHandler::init() <- Exit
      1> myGlobalHandler::init() <- Entry *** Again, on this instance, why
      1< myGlobalHandler::init() <- Exit *** is init being called twice?
      0> myTransportHandler::myTransportHandler() <- Entry
      0< myTransportHandler::myTransportHandler() <- Exit
      0> myTransportHandler::init() <- Entry
      0< myTransportHandler::init() <- Exit
      0> myTransportHandler::init() <- Entry *** Why is the init beign called
      0< myTransportHandler::init() <- Exit *** twice?
      1> myTransportHandler::myTransportHandler()<- Entry
      1< myTransportHandler::myTransportHandler() <- Exit
      1> myTransportHandler::init() <- Entry
      1< myTransportHandler::init() <- Exit
      1> myTransportHandler::init() <- Entry *** Again, on this instance, why
      1< myTransportHandler::init() <- Exit *** is init being called twice?
      0> myClientHandler::myClientHandler() <- Entry
      0< myClientHandler::myClientHandler() <- Exit
      0> myClientHandler::init() <- Entry
      0< myClientHandler::init() <- Exit
      0> myClientHandler::init() <- Entry *** Why is the init beign called
      0< myClientHandler::init() <- Exit *** twice?
      0> myHandler::myHandler() <- Entry
      0< myHandler::myHandler() <- Exit
      0> myHandler::init() <- Entry
      0< myHandler::init() <- Exit
      0> myHandler::init() <- Entry *** Why is the init beign called
      0< myHandler::init() <- Exit *** twice?
      0> myClientHandler::invoke() <- Entry
      0- Before the pivot point
      0< myClientHandler::invoke() <- Exit
      0> myGlobalHandler::invoke() <- Entry
      0- Before the pivot point
      0< myGlobalHandler::invoke() <- Exit
      0> myTransportHandler::invoke() <- Entry
      0- Before the pivot point
      0< myTransportHandler::invoke() <- Exit
      1> myTransportHandler::invoke() <- Entry
      1- After the pivot point
      1< myTransportHandler::invoke() <- Exit
      1> myGlobalHandler::invoke() <- Entry
      1- After the pivot point
      1< myGlobalHandler::invoke() <- Exit
      0> myHandler::invoke() <- Entry
      0- After the pivot point
      0< myHandler::invoke() <- Exit
      0> myClientHandler::fini() <- Entry
      0< myClientHandler::fini() <- Exit
      0> myHandler::fini() <- Entry
      0< myHandler::fini() <- Exit

      Stock quote for XXX is £50.38 ($92.70) per share.

      0> myClientHandler::fini() <- Entry
      0< myClientHandler::fini() <- Exit
      0> myClientHandler::~myClientHandler() <- Entry
      0< myClientHandler::~myClientHandler() <- Exit
      0> myHandler::fini() <- Entry
      0< myHandler::fini() <- Exit
      0> myHandler::~myHandler() <- Entry
      0< myHandler::~myHandler() <- Exit

      Attachments

        Activity

          People

            Unassigned Unassigned
            prestonf Fred Preston
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: