Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
None
-
None
-
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