dgraham 2002/11/24 13:59:43 Modified: src/share/org/apache/struts/util RequestUtils.java Log: Added encodeURL method to handle URLEncoder.encode() issues between java 1.3 and 1.4. Revision Changes Path 1.73 +50 -20 jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java Index: RequestUtils.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v retrieving revision 1.72 retrieving revision 1.73 diff -u -r1.72 -r1.73 --- RequestUtils.java 18 Nov 2002 02:52:11 -0000 1.72 +++ RequestUtils.java 24 Nov 2002 21:59:43 -0000 1.73 @@ -62,6 +62,7 @@ package org.apache.struts.util; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; @@ -87,7 +88,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; -import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; @@ -411,7 +411,7 @@ url.setLength(hash); } url.append('#'); - url.append(URLEncoder.encode(anchor)); + url.append(encodeURL(anchor)); } // Add dynamic parameters if requested @@ -447,7 +447,7 @@ } else { url.append(separator); } - url.append(URLEncoder.encode(key)); + url.append(encodeURL(key)); url.append('='); // Interpret null as "no value" } else if (value instanceof String) { if (!question) { @@ -456,9 +456,9 @@ } else { url.append(separator); } - url.append(URLEncoder.encode(key)); + url.append(encodeURL(key)); url.append('='); - url.append(URLEncoder.encode((String) value)); + url.append(encodeURL((String) value)); } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { @@ -468,9 +468,9 @@ } else { url.append(separator); } - url.append(URLEncoder.encode(key)); + url.append(encodeURL(key)); url.append('='); - url.append(URLEncoder.encode(values[i])); + url.append(encodeURL(values[i])); } } else /* Convert other objects to a string */ { if (!question) { @@ -479,16 +479,16 @@ } else { url.append(separator); } - url.append(URLEncoder.encode(key)); + url.append(encodeURL(key)); url.append('='); - url.append(URLEncoder.encode(value.toString())); + url.append(encodeURL(value.toString())); } } // Re-add the saved anchor (if any) if (anchor != null) { url.append('#'); - url.append(URLEncoder.encode(anchor)); + url.append(encodeURL(anchor)); } } @@ -1080,8 +1080,7 @@ // Look up the requested MessageResources in page scope if (bundle == null) { bundle = Globals.MESSAGES_KEY; - resources = - (MessageResources) pageContext.getAttribute(bundle, PageContext.PAGE_SCOPE); + resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.PAGE_SCOPE); } // Look up the requested MessageResources in request scope @@ -1102,18 +1101,18 @@ saveException(pageContext, e); throw e; } - + // Look up the requested Locale if (locale == null) { locale = Globals.LOCALE_KEY; } - + Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); - + if (userLocale == null) { userLocale = defaultLocale; } - + // Return the requested message presence indicator return (resources.isPresent(userLocale, key)); } @@ -1640,6 +1639,37 @@ } return errors; + } + + /** + * Use the new URLEncoder.encode() method from java 1.4 if available, else + * use the old deprecated version. This method uses reflection to find the appropriate + * method; if the reflection operations throw exceptions, this will return the url + * encoded with the old URLEncoder.encode() method. + * @return String - the encoded url. + */ + public static String encodeURL(String url) { + // default to old version + String encodedURL = URLEncoder.encode(url); + Class encoderClass = URLEncoder.class; + + try { + // get version of encode method with two String args + Class[] args = new Class[] { String.class, String.class }; + Method encode = encoderClass.getMethod("encode", args); + + // encode url with new 1.4 method and UTF-8 encoding + encodedURL = (String) encode.invoke(null, new Object[] { url, "UTF-8" }); + + } catch (IllegalAccessException e) { + LOG.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); + } catch (InvocationTargetException e) { + LOG.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); + } catch (NoSuchMethodException e) { + LOG.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); + } + + return encodedURL; } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>