Thanks for applying the patch. Questions below:

David Graham wrote:
I've made the changes.

A couple things:
1.  Please post patches to bugzilla tickets.

Where is the bugzilla? I can't find a link to it at the website....


2. We adhere to the standard Java coding guidelines which prohibit underscores except in constants.

I'll do my best to abide by your conventions.


3. Your if statement should have been (encode != null)

That was the fix I sent in my second patch. I'm glad you saw it, too.


David



From: Luiz-Otavio Zorzella <[EMAIL PROTECTED]>
Reply-To: "Struts Developers List" <[EMAIL PROTECTED]>
To: Struts Developers List <[EMAIL PROTECTED]>
Subject: Re: Slow encode method -- patch included
Date: Sat, 01 Mar 2003 15:39:10 -0800

Sorry -- I hit a tiny typo there. Correct patch included.

Luiz-Otavio Zorzella wrote:

This patch fixes an incredibly inefficient, often-used encodeURL method. The merits of the patch should be self-evident --

1) it preserves the original goal of using the jdk 1.4's encode if available, while

2) it does not call 2 java encode method each time and

3) it does not do so much reflection each time around

Let me know of any concerns,

Zorzella


------------------------------------------------------------------------


Index: src/share/org/apache/struts/util/RequestUtils.java
===================================================================
RCS file: /home/cvspublic/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v


retrieving revision 1.90
diff -u -r1.90 RequestUtils.java
--- src/share/org/apache/struts/util/RequestUtils.java 26 Feb 2003 04:48:56 -0000 1.90
+++ src/share/org/apache/struts/util/RequestUtils.java 1 Mar 2003 23:23:00 -0000
@@ -1896,6 +1896,19 @@
return errors;
}
+ private static Method _encode = null;
+
+ static {
+ try {
+ // get version of encode method with two String args
+ Class[] args = new Class[] { String.class, String.class };
+ _encode = URLEncoder.class.getMethod("encode", args);
+ } catch (Exception e) {
+ log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e);
+ }
+ }
+
+ /**
* 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
@@ -1904,27 +1917,15 @@
* @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) {
+ if (_encode == null)
+ return (String) _encode.invoke(null, new Object[] { url, "UTF-8" });
+ } catch (Exception e) {
log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e);
}
-
- return encodedURL;
+ + return URLEncoder.encode(url);
}
}




------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Index: src/share/org/apache/struts/util/RequestUtils.java
===================================================================
RCS file: /home/cvspublic/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v


retrieving revision 1.90
diff -u -r1.90 RequestUtils.java
--- src/share/org/apache/struts/util/RequestUtils.java 26 Feb 2003 04:48:56 -0000 1.90
+++ src/share/org/apache/struts/util/RequestUtils.java 1 Mar 2003 23:37:19 -0000
@@ -1896,6 +1896,19 @@
return errors;
}


+ private static Method _encode = null;
+
+ static {
+ try {
+ // get version of encode method with two String args
+ Class[] args = new Class[] { String.class, String.class };
+ _encode = URLEncoder.class.getMethod("encode", args);
+ } catch (Exception e) {
+ log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e);
+ }
+ }
+
+
/**
* 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
@@ -1904,27 +1917,15 @@
* @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) {
+ if (_encode != null)
+ return (String) _encode.invoke(null, new Object[] { url, "UTF-8" });
+ } catch (Exception e) {
log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e);
}
-
- return encodedURL;
+
+ return URLEncoder.encode(url);
}


}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



_________________________________________________________________
Add photos to your e-mail with MSN 8. Get 2 months FREE*. http://join.msn.com/?page=features/featuredemail



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



Reply via email to