Ok, just add some log in mod_jk.c and see : if (rc > 0) {^M /* If tomcat returned no body and the status is not OK,^M let apache handle the error code */^M jk_log(xconf->log, JK_LOG_INFO, "sent_bodyct=%d status=%d header_only=%d" , r->sent_bodyct, r->status, r->header_only); if (!r->sent_bodyct && r->status >= HTTP_BAD_REQUEST) {^M
SOAP reply (HTTP 200) [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1043): received from ajp13 pos=0 len=4 max=8192 [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1043): 0000 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ................ [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1043): received from ajp13 pos=0 len=4 max=8192 [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1043): 0000 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ................ [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1043): received from ajp13 pos=0 len=2 max=8192 [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1043): 0000 05 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ................ [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (1506): AJP13 protocol: Reuse is OK [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] jk_ajp_common.c (2286): recycling connection pool slot=0 for worker soa-850 [Tue Apr 24 11:57:48 2007] [5833:0273] [info] mod_jk.c (2224): sent_bodyct=0 status=200 header_only=0 [Tue Apr 24 11:57:48 2007] [5833:0273] [debug] mod_jk.c (2233): Service finished with status=200 for worker=soa-850 SOAP FAULT (HTTP 500) [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1043): received from ajp13 pos=0 len=4 max=8192 [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1043): 0000 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ................ [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1043): received from ajp13 pos=0 len=4 max=8192 [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1043): 0000 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ................ [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1043): received from ajp13 pos=0 len=2 max=8192 [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1043): 0000 05 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ................ [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (1506): AJP13 protocol: Reuse is OK [Tue Apr 24 11:55:27 2007] [5833:0024] [debug] jk_ajp_common.c (2286): recycling connection pool slot=0 for worker soa-850 [Tue Apr 24 11:55:27 2007] [5833:0024] [info] mod_jk.c (2224): sent_bodyct=0 status=500 header_only=0 [Tue Apr 24 11:55:27 2007] [5833:0024] [info] mod_jk.c (2226): No body with status=500 for worker=soa-850 It's strange but the sent_body is never set, so when HTTP 500 is encountered, we think we got no BODY from Tomcat and fall back to Apache 500 error. Any idea ? 2007/4/24, Rainer Jung <[EMAIL PROTECTED]>:
Hi Henri, > - Another annoying problem is the HTTP 500 error in SOAP mode. It > seems the sent_bodyct flag is not set in Apache 2 side, which is > strange since I got reply from Tomcat (HTTP 500 in HEADER and > SOAPFault in BODY). > > Since the sent_bodyct should be set inside Apache 2.x, it may be > something specific to i5/OS IBM implementation of Apache 2.0. I'm > still looking for informations from Rochester Labs. > > Do you know where the sent_bodyct is set in Apache 2.x, it will be > usefull to diagnose problem with IBMers ? include/httpd.h /** A structure that represents the current request */ struct request_rec { ... /** byte count in stream is for body */ apr_off_t sent_bodyct; ... Initialization in server/protocol.c: Value set to 0 in request_rec *ap_read_request(conn_rec *conn) During request processing the value gets set to 1 in modules/http/http_protocol.c. AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, apr_bucket_brigade *b) ... if (r->assbackwards) { r->sent_bodyct = 1; ap_remove_output_filter(f); return ap_pass_brigade(f->next, b); } ... (further equest processing) ... if (r->header_only) { apr_brigade_destroy(b); ctx->headers_sent = 1; return OK; } r->sent_bodyct = 1; /* Whatever follows is real body stuff... */ ... assbackwards is documented as: /** HTTP/0.9, "simple" request (e.g. GET /foo\n w/no headers) */ int assbackwards; Regards, Rainer --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]