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/>/ ------------------------------------------------------------------------ |