From: <php...@li...> - 2006-06-10 07:48:00
|
I successfully built php-java-bridge_3.0.8.3 on Solaris 10 U1 x86. I'm now trying to deploy it. I have Apache 2.2 + PHP5 on the 'client' end, Sun Java System Web Server 6.1 SP5 on the server end. In my php.ini, I have: extension = java.so [java] java.hosts = "127.0.0.1:80" java.servlet = "/JavaBridge/JavaBridge.phpjavabridge" java.log_level="4" After some tweaks to fix some SJSWS specific issues (ensuring that all directories in the pat to the shared docs directory are 755, changing the ACL to allow PUT), I'm stuck. test.php hangs before it shows the bottom of the page. The WS error log shows an NPE in GlobalRef.get. Here is the whole interaction as logged at WS: [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> <C v="java.lang.System" p="C" i="136880520" > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> </C> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 <-- <O v="1" p="O" i="136880520"/> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 re-directing to port# Pipe:/var/tmp//.php_java_bridgeC3a4CQ [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> <I v="1" m="getProperties" p="I" i="136886208" > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): JavaBridge ERROR: An exception occured [09/Jun/2006:23:10:33] failure (21795): for host 127.0.0.1 trying to PUT /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: [/JavaBridge] ServletContext.log(): java.lang.NullPointerException at php.java.bridge.GlobalRef.get(GlobalRef.java:30) at php.java.bridge.Request.getGlobalRef(Request.java:88) at php.java.bridge.Request.begin(Request.java:352) at php.java.bridge.Parser.CALL_BEGIN(Parser.java:95) at php.java.bridge.Parser.parse(Parser.java:156) at php.java.bridge.Request.handleRequest(Request.java:460) at php.java.bridge.Request.handleRequests(Request.java:493) at php.java.servlet.PhpJavaServlet.handleSocketConnection(PhpJavaServlet.java:213) at php.java.servlet.PhpJavaServlet.doPut(PhpJavaServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at javax.servlet.http.HttpServlet.service(HttpServlet.java:908) at org.apache.catalina.core.StandardWrapperValve.invokeServletService(StandardWrapperValve.java:771) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:322) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:209) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) at com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:161) at com.iplanet.ias.web.WebContainer.service(WebContainer.java:580) 30 seconds later, Apache reports: [Fri Jun 09 23:11:03 2006] [notice] child pid 21735 exit signal Segmentation fault (11) Any idea what could be happening here? I'm trying to interpret the trace from the WS error file - extracting the relevant stuff, it says: # $v = new JavaClass("java.lang.System"); <C v="java.lang.System" p="C" i="136880520" > </C> <O v="1" p="O" i="136880520"/> re-directing to port# Pipe:/var/tmp//.php_java_bridgeC3a4CQ # $v->getProperties() <I v="1" m="getProperties" p="I" i="136886208" > So the first method invocation returns an object reference '1', which is then used in the second invocation, but, by then, this object doesn't seem to exist. I can see the redirection to the named pipe in between the two calls, but, from the stack trace, the client doesn't seem to be following the redirect - it's just doing another PUT. It looks like the client should be setting the X_JAVABRIDGE_OVERRIDE_HOSTS header to override the redirect, but, for some reason, it doesn't, so the server doesn't know to preserve the context in the second PUT. Does this all make sense? Any suggestions on tracking this down further? Cheers, Pat -- ------------------------------------------------------------------------ Pat Patterson <mailto:pat...@su...> Federation Architect Superpatterns <http://blogs.sun.com/roller/page/superpat> blog, Planet Identity <http://planetidentity.org> Identity Management Products <http://www.sun.com/identity> /Sun Microsystems, Inc. <http://www.sun.com/>/ ------------------------------------------------------------------------ |
From: <php...@li...> - 2006-06-11 05:27:17
|
I added some debug output to begin_header in client.c: case 'X':// Redirect { php_log_err("Got X"); php_log_err(str); char *key; static const char context[] = "X_JAVABRIDGE_CONTEXT"; static const char redirect[]= "X_JAVABRIDGE_REDIRECT"; if(!(*ctx)->peer_redirected && !strcmp(str, redirect)) { php_log_err("redirect"); And this is what I get: [Sat Jun 10 21:50:47 2006] [error] [client 127.0.0.1] Got X, referer: http://localhost:81/JavaBridge/index.php [Sat Jun 10 21:50:47 2006] [error] [client 127.0.0.1] X_javabridge_redirect, referer: http://localhost:81/JavaBridge/index.php But no 'redirect'; the header has been munged to Mixed case, so the strcmp against redirect fails. I suspect this is happening in the Web Server implementation of HttpServletResponse. HTTP spec (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) states that header field names are case-insensitive, so the comparison should use strcasecmp. Changing strcmp to strcasecmp in lines 398, 414, 424 and 444 fixes the problem. Hope this is useful, and thanks again for a really useful tool :-) Cheers, Pat php...@li... wrote: > I successfully built php-java-bridge_3.0.8.3 on Solaris 10 U1 x86. I'm > now trying to deploy it. I have Apache 2.2 + PHP5 on the 'client' end, > Sun Java System Web Server 6.1 SP5 on the server end. > > In my php.ini, I have: > > extension = java.so > [java] > java.hosts = "127.0.0.1:80" > java.servlet = "/JavaBridge/JavaBridge.phpjavabridge" > java.log_level="4" > > > After some tweaks to fix some SJSWS specific issues (ensuring that all > directories in the pat to the shared docs directory are 755, changing > the ACL to allow PUT), I'm stuck. test.php hangs before it shows the > bottom of the page. > > The WS error log shows an NPE in GlobalRef.get. Here is the whole > interaction as logged at WS: > > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> <C > v="java.lang.System" p="C" i="136880520" > > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> </C> > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 <-- <O > v="1" p="O" i="136880520"/> > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 > re-directing to port# Pipe:/var/tmp//.php_java_bridgeC3a4CQ > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> <I > v="1" m="getProperties" p="I" i="136886208" > > [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): JavaBridge ERROR: An exception occured > [09/Jun/2006:23:10:33] failure (21795): for host 127.0.0.1 trying to PUT > /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: > [/JavaBridge] ServletContext.log(): > java.lang.NullPointerException > at php.java.bridge.GlobalRef.get(GlobalRef.java:30) > at php.java.bridge.Request.getGlobalRef(Request.java:88) > at php.java.bridge.Request.begin(Request.java:352) > at php.java.bridge.Parser.CALL_BEGIN(Parser.java:95) > at php.java.bridge.Parser.parse(Parser.java:156) > at php.java.bridge.Request.handleRequest(Request.java:460) > at php.java.bridge.Request.handleRequests(Request.java:493) > at > php.java.servlet.PhpJavaServlet.handleSocketConnection(PhpJavaServlet.java:213) > at php.java.servlet.PhpJavaServlet.doPut(PhpJavaServlet.java:260) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:908) > at > org.apache.catalina.core.StandardWrapperValve.invokeServletService(StandardWrapperValve.java:771) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:322) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:209) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) > at > com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:161) > at com.iplanet.ias.web.WebContainer.service(WebContainer.java:580) > > 30 seconds later, Apache reports: > > [Fri Jun 09 23:11:03 2006] [notice] child pid 21735 exit signal > Segmentation fault (11) > > Any idea what could be happening here? > > I'm trying to interpret the trace from the WS error file - extracting > the relevant stuff, it says: > > # $v = new JavaClass("java.lang.System"); > <C v="java.lang.System" p="C" i="136880520" > > </C> > <O v="1" p="O" i="136880520"/> > > re-directing to port# Pipe:/var/tmp//.php_java_bridgeC3a4CQ > > # $v->getProperties() > <I v="1" m="getProperties" p="I" i="136886208" > > > So the first method invocation returns an object reference '1', which is > then used in the second invocation, but, by then, this object doesn't > seem to exist. I can see the redirection to the named pipe in between > the two calls, but, from the stack trace, the client doesn't seem to be > following the redirect - it's just doing another PUT. > > It looks like the client should be setting the > X_JAVABRIDGE_OVERRIDE_HOSTS header to override the redirect, but, for > some reason, it doesn't, so the server doesn't know to preserve the > context in the second PUT. > > Does this all make sense? Any suggestions on tracking this down further? > > Cheers, > > Pat > -- ------------------------------------------------------------------------ Pat Patterson <mailto:pat...@su...> Federation Architect Superpatterns <http://blogs.sun.com/roller/page/superpat> blog, Planet Identity <http://planetidentity.org> Identity Management Products <http://www.sun.com/identity> /Sun Microsystems, Inc. <http://www.sun.com/>/ ------------------------------------------------------------------------ |
From: <php...@li...> - 2006-06-12 14:59:13
|
Added 1504821 to Issue Tracker. Cheers, Pat php...@li... wrote: > I added some debug output to begin_header in client.c: > > case 'X':// Redirect > { > php_log_err("Got X"); > php_log_err(str); > char *key; > static const char context[] = "X_JAVABRIDGE_CONTEXT"; > static const char redirect[]= "X_JAVABRIDGE_REDIRECT"; > if(!(*ctx)->peer_redirected && !strcmp(str, redirect)) { > php_log_err("redirect"); > > And this is what I get: > > [Sat Jun 10 21:50:47 2006] [error] [client 127.0.0.1] Got X, referer: > http://localhost:81/JavaBridge/index.php > [Sat Jun 10 21:50:47 2006] [error] [client 127.0.0.1] > X_javabridge_redirect, referer: http://localhost:81/JavaBridge/index.php > > But no 'redirect'; the header has been munged to Mixed case, so the > strcmp against redirect fails. I suspect this is happening in the Web > Server implementation of HttpServletResponse. > > HTTP spec (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) > states that header field names are case-insensitive, so the comparison > should use strcasecmp. Changing strcmp to strcasecmp in lines 398, 414, > 424 and 444 fixes the problem. > > Hope this is useful, and thanks again for a really useful tool :-) > > Cheers, > > Pat > > php...@li... wrote: > >> I successfully built php-java-bridge_3.0.8.3 on Solaris 10 U1 x86. I'm >> now trying to deploy it. I have Apache 2.2 + PHP5 on the 'client' end, >> Sun Java System Web Server 6.1 SP5 on the server end. >> >> In my php.ini, I have: >> >> extension = java.so >> [java] >> java.hosts = "127.0.0.1:80" >> java.servlet = "/JavaBridge/JavaBridge.phpjavabridge" >> java.log_level="4" >> >> >> After some tweaks to fix some SJSWS specific issues (ensuring that all >> directories in the pat to the shared docs directory are 755, changing >> the ACL to allow PUT), I'm stuck. test.php hangs before it shows the >> bottom of the page. >> >> The WS error log shows an NPE in GlobalRef.get. Here is the whole >> interaction as logged at WS: >> >> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> <C >> v="java.lang.System" p="C" i="136880520" > >> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> </C> >> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 <-- <O >> v="1" p="O" i="136880520"/> >> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 >> re-directing to port# Pipe:/var/tmp//.php_java_bridgeC3a4CQ >> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): JavaBridge DEBUG: @1a73d30 --> <I >> v="1" m="getProperties" p="I" i="136886208" > >> [09/Jun/2006:23:10:33] info (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): JavaBridge ERROR: An exception occured >> [09/Jun/2006:23:10:33] failure (21795): for host 127.0.0.1 trying to PUT >> /JavaBridge/JavaBridge.phpjavabridge, service-j2ee reports: WEB2798: >> [/JavaBridge] ServletContext.log(): >> java.lang.NullPointerException >> at php.java.bridge.GlobalRef.get(GlobalRef.java:30) >> at php.java.bridge.Request.getGlobalRef(Request.java:88) >> at php.java.bridge.Request.begin(Request.java:352) >> at php.java.bridge.Parser.CALL_BEGIN(Parser.java:95) >> at php.java.bridge.Parser.parse(Parser.java:156) >> at php.java.bridge.Request.handleRequest(Request.java:460) >> at php.java.bridge.Request.handleRequests(Request.java:493) >> at >> php.java.servlet.PhpJavaServlet.handleSocketConnection(PhpJavaServlet.java:213) >> at php.java.servlet.PhpJavaServlet.doPut(PhpJavaServlet.java:260) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:908) >> at >> org.apache.catalina.core.StandardWrapperValve.invokeServletService(StandardWrapperValve.java:771) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:322) >> at >> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212) >> at >> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:209) >> at >> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509) >> at >> com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:161) >> at com.iplanet.ias.web.WebContainer.service(WebContainer.java:580) >> >> 30 seconds later, Apache reports: >> >> [Fri Jun 09 23:11:03 2006] [notice] child pid 21735 exit signal >> Segmentation fault (11) >> >> Any idea what could be happening here? >> >> I'm trying to interpret the trace from the WS error file - extracting >> the relevant stuff, it says: >> >> # $v = new JavaClass("java.lang.System"); >> <C v="java.lang.System" p="C" i="136880520" > >> </C> >> <O v="1" p="O" i="136880520"/> >> >> re-directing to port# Pipe:/var/tmp//.php_java_bridgeC3a4CQ >> >> # $v->getProperties() >> <I v="1" m="getProperties" p="I" i="136886208" > >> >> So the first method invocation returns an object reference '1', which is >> then used in the second invocation, but, by then, this object doesn't >> seem to exist. I can see the redirection to the named pipe in between >> the two calls, but, from the stack trace, the client doesn't seem to be >> following the redirect - it's just doing another PUT. >> >> It looks like the client should be setting the >> X_JAVABRIDGE_OVERRIDE_HOSTS header to override the redirect, but, for >> some reason, it doesn't, so the server doesn't know to preserve the >> context in the second PUT. >> >> Does this all make sense? Any suggestions on tracking this down further? >> >> Cheers, >> >> Pat >> -- ------------------------------------------------------------------------ Pat Patterson <mailto:pat...@su...> Federation Architect Superpatterns <http://blogs.sun.com/roller/page/superpat> blog, Planet Identity <http://planetidentity.org> Identity Management Products <http://www.sun.com/identity> /Sun Microsystems, Inc. <http://www.sun.com/>/ ------------------------------------------------------------------------ |
From: <php...@li...> - 2006-06-12 18:23:07
Attachments:
php-java-bridge-3.0.8.3_to_3.0.8.4.patch
|
Hi [please excuse the delay] > Added 1504821 to Issue Tracker. great, thank you very much for these bug reports! > > X_javabridge_redirect, referer: Interesting. They probably have a hash function which doesn't allow upper case and probably use this function to also hash up headers from applications. I have attached a patch called php-java-bridge-3.0.8.3_to_3.0.8.4.patch, it should fix this and the "ar" issue. I will apply it to 3.0.8 and 3.1.0, when I have some time. Regards, Jost Boekemeier __________________________________________________ Do You Yahoo!? Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails. http://mail.yahoo.com |