[ 
http://issues.apache.org/jira/browse/AXISCPP-731?page=comments#action_12324490 
] 

Henrik Nordberg commented on AXISCPP-731:
-----------------------------------------

Just wanted to add something here that I wrote to the list.

John Hawkins wrote:
> We really need to sort out this whole problem resolution thing. How any times 
> have we seen emails like this !? 
> Any one got any clues as to what we can do ? 
 
Yes, I have some suggestions:
 
1. Solve http://issues.apache.org/jira/browse/AXISCPP-731 (this explains why 
"Apache crashes") by wrapping the code in 
 
int axis_handler_helper(request_rec* req_rec)
and
static void module_init(apr_pool_t* p, server_rec* svr_rec)
 
in mod_axis2.cpp (and correspondingly for the other "servers", but my guess is 
mod_axis2 is by far the most commenly used one), with try and catch, where the 
catch should look like this:

} catch(AxisException& e) {
    std::cerr << "An error occurred while Axis was initializing: " << e.what() 
<< std::endl;
} catch(...) {
    std::cerr << "An unkown error occurred while Axis was initializing: " << 
e.what() << std::endl;
}
 
You will need to add two lines at the top of the file:
 
#include <iostream>
#include <axis/AxisException.hpp>

This will result in errors being written to Apache's access.log. There are 
other methods you can use to write to the error.log file too. But writing to 
stderr is convenient, and the main point is that we see the error message 
instead of a crash.
 
2. But wait, there is more! It turns out that the error messages for the common 
library loading problems that many have happening, do not include the name of 
the library being loaded. This can fixed this way:
Search the code for the string "Load lib error='%s' \n". Add to this string 
"Lib = '%s'", and make sure you include the path of the library after 
PLATFORM_LOADLIB_ERROR in the sprintf arg list. (Oh, and while you are at it 
you can replace sprintf() with std::string. And why is 
PLATFORM_GET_ERROR_MESSAGE() returning string* instead of string ??!!)
 
I did this at work and it works fine (I keep getting an error saying it can't 
find the xml parser lib, even though I have Xerces in the path). This code was 
from memory, but it should compile.
 
 - Henrik


> extern "C" functions throw exceptions
> -------------------------------------
>
>          Key: AXISCPP-731
>          URL: http://issues.apache.org/jira/browse/AXISCPP-731
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Apache module
>     Versions: current (nightly)
>     Reporter: Henrik Nordberg

>
> The following functions defined as extern "C" throw exceptions:
> In Axis.cpp:
> int initialize_module (int bServer);
> int uninitialize_module ();
> Can these throws be changed to log to the Apache error_log and return a 
> failure code?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to