rsitze 2002/09/27 08:32:02 Modified: java/src/org/apache/axis/transport/http AxisServlet.java java/src/org/apache/axis/configuration EngineConfigurationFactoryServlet.java java/src/org/apache/axis/server JNDIAxisServerFactory.java Log: 13061 - getRealPath doesn't work for WebLogic. This fix checks for the null, but a real fix is going to require to much work at this time (change path oriented logic to use URLs instead). Revision Changes Path 1.147 +18 -6 xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java Index: AxisServlet.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java,v retrieving revision 1.146 retrieving revision 1.147 diff -u -r1.146 -r1.147 --- AxisServlet.java 25 Sep 2002 21:28:59 -0000 1.146 +++ AxisServlet.java 27 Sep 2002 15:32:01 -0000 1.147 @@ -175,8 +175,18 @@ JavaUtils.isTrueExplicitly(getOption(context, INIT_PROPERTY_ENABLE_LIST, null)); jwsClassDir = getOption(context, INIT_PROPERTY_JWS_CLASS_DIR, null); + + /** + * There are DEFINITATE problems here if + * getHomeDir and/or getDefaultJWSClassDir return null + * (as they could with WebLogic). + * This needs to be reexamined in the future, but this + * should fix any NPE's in the mean time. + */ if (jwsClassDir != null) { - jwsClassDir = getHomeDir()+ jwsClassDir; + if (getHomeDir() != null) { + jwsClassDir = getHomeDir() + jwsClassDir; + } } else { jwsClassDir = getDefaultJWSClassDir(); } @@ -843,16 +853,16 @@ req.getHeader( HTTPConstants.HEADER_CONTENT_TYPE)); log.debug("HEADER_CONTENT_LOCATION:" + req.getHeader( HTTPConstants.HEADER_CONTENT_LOCATION)); - log.debug("Constants.MC_HOME_DIR:" + - getHomeDir()); + log.debug("Constants.MC_HOME_DIR:" + String.valueOf(getHomeDir())); log.debug("Constants.MC_RELATIVE_PATH:"+req.getServletPath()); - log.debug("HTTPConstants.MC_HTTP_SERVLETLOCATION:"+ getWebInfPath() ); + + log.debug("HTTPConstants.MC_HTTP_SERVLETLOCATION:"+ String.valueOf(getWebInfPath())); log.debug("HTTPConstants.MC_HTTP_SERVLETPATHINFO:" + req.getPathInfo() ); log.debug("HTTPConstants.HEADER_AUTHORIZATION:" + req.getHeader(HTTPConstants.HEADER_AUTHORIZATION)); log.debug("Constants.MC_REMOTE_ADDR:"+req.getRemoteAddr()); - log.debug("configPath:" + getWebInfPath()); + log.debug("configPath:" + String.valueOf(getWebInfPath())); } /* Set the Transport */ @@ -938,7 +948,9 @@ * @return directory for JWS files */ protected String getDefaultJWSClassDir() { - return getWebInfPath() + File.separator + "jwsClasses"; + return (getWebInfPath() == null) + ? null // ??? what is a good FINAL default for WebLogic? + : getWebInfPath() + File.separator + "jwsClasses"; } /** 1.17 +29 -15 xml-axis/java/src/org/apache/axis/configuration/EngineConfigurationFactoryServlet.java Index: EngineConfigurationFactoryServlet.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/configuration/EngineConfigurationFactoryServlet.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- EngineConfigurationFactoryServlet.java 23 Sep 2002 16:17:46 -0000 1.16 +++ EngineConfigurationFactoryServlet.java 27 Sep 2002 15:32:02 -0000 1.17 @@ -168,24 +168,35 @@ FileProvider config = null; String realWebInfPath = ctx.getRealPath(appWebInfPath); - if (realWebInfPath == null) { - File configFile = new File(realWebInfPath, SERVER_CONFIG_FILE); - if (!configFile.exists()) { - InputStream is = ctx.getResourceAsStream(appWebInfPath + "/" + SERVER_CONFIG_FILE); - if (is != null) { - // FileProvider assumes responsibility for 'is': - // do NOT call is.close(). - config = new FileProvider(is); - } - - if (config == null) { - log.error(Messages.getMessage("servletEngineWebInfError01", - configFile.toString())); - } + + /** + * If path/file doesn't exist, it may still be accessible + * as a resource-stream (i.e. it may be packaged in a JAR + * or WAR file). + */ + if (realWebInfPath == null || + !(new File(realWebInfPath, SERVER_CONFIG_FILE)).exists()) + { + String name = appWebInfPath + "/" + SERVER_CONFIG_FILE; + InputStream is = ctx.getResourceAsStream(name); + if (is != null) { + // FileProvider assumes responsibility for 'is': + // do NOT call is.close(). + config = new FileProvider(is); + } + + if (config == null) { + log.error(Messages.getMessage("servletEngineWebInfError01", + name)); } } - if (config == null) { + /** + * Couldn't get data OR file does exist. + * If we have a path, then attempt to either open + * the existing file, or create an (empty) file. + */ + if (config == null && realWebInfPath != null) { try { config = new FileProvider(realWebInfPath, SERVER_CONFIG_FILE); } catch (ConfigurationException e) { @@ -193,6 +204,9 @@ } } + /** + * Fall back to config file packaged with AxisEngine + */ if (config == null) { log.warn(Messages.getMessage("servletEngineWebInfWarn00")); try { 1.10 +31 -9 xml-axis/java/src/org/apache/axis/server/JNDIAxisServerFactory.java Index: JNDIAxisServerFactory.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/server/JNDIAxisServerFactory.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- JNDIAxisServerFactory.java 18 Sep 2002 16:10:39 -0000 1.9 +++ JNDIAxisServerFactory.java 27 Sep 2002 15:32:02 -0000 1.10 @@ -130,21 +130,43 @@ // THIS IS NOT ACCEPTABLE JNDI NAMING... String name = servletContext.getRealPath("/WEB-INF/Server"); + +// The following was submitted as a patch, but I don't believe this +// is going to produce a valid JNDI name of ANY sort... yuck. +// This would produce a URL, not a path name. +// +// Since it appears, from comments above, that this entire scheme is +// broken, then for now I'll simply check for a null-name to prevent +// possible NPE on WebLogic. +// +// What ARE we doing here?!?! +// +// if (name == null) { +// try { +// name = servletContext.getResource("/WEB-INF/Server").toString(); +// } catch (Exception e) { +// // ignore +// } +// } // We've got JNDI, so try to find an AxisServer at the // specified name. - try { - server = (AxisServer)context.lookup(name); - } catch (NamingException e) { - // Didn't find it. - server = super.getServer(environment); + if (name != null) { try { - context.bind(name, server); - } catch (NamingException e1) { - // !!! Couldn't do it, what should we do here? + server = (AxisServer)context.lookup(name); + } catch (NamingException e) { + // Didn't find it. + server = super.getServer(environment); + try { + context.bind(name, server); + } catch (NamingException e1) { + // !!! Couldn't do it, what should we do here? + } } } - } else { + } + + if (server == null) { server = super.getServer(environment); }