You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/03/12 23:52:33 UTC
svn commit: r636559 -
/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/
Author: fmeschbe
Date: Wed Mar 12 15:52:29 2008
New Revision: 636559
URL: http://svn.apache.org/viewvc?rev=636559&view=rev
Log:
SLING-242 Cleanup EncodedRequestParameter to not round-trip to byte[] on plain strings
for parameters retrieved from the servlet container
Added:
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java
- copied, changed from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java
- copied, changed from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java
Removed:
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java
Modified:
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java
Copied: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java (from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java?p2=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java&p1=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java&r1=636378&r2=636559&rev=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractEncodedParameter.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/AbstractRequestParameter.java Wed Mar 12 15:52:29 2008
@@ -20,32 +20,20 @@
import org.apache.sling.api.request.RequestParameter;
-abstract class AbstractEncodedParameter implements RequestParameter {
+abstract class AbstractRequestParameter implements RequestParameter {
private String encoding;
- private String cachedValue;
- protected AbstractEncodedParameter(String encoding) {
+ protected AbstractRequestParameter(String encoding) {
this.encoding = encoding;
}
void setEncoding(String encoding) {
this.encoding = encoding;
- this.cachedValue = null;
}
String getEncoding() {
return this.encoding;
}
- String getEncodedString() {
- if (this.cachedValue == null) {
- // try explicit encoding if available
- this.cachedValue = this.decode(this.get(), this.encoding);
- }
-
- return this.cachedValue;
- }
-
- protected abstract String decode(byte[] data, String encoding);
}
Copied: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java (from r636378, incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java?p2=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java&p1=incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java&r1=636378&r2=636559&rev=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/EncodedRequestParameter.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ContainerRequestParameter.java Wed Mar 12 15:52:29 2008
@@ -23,27 +23,39 @@
import java.io.UnsupportedEncodingException;
/**
- * The <code>EncodedRequestParameter</code> TODO
+ * The <code>ContainerRequestParameter</code> TODO
*/
-public class EncodedRequestParameter extends AbstractEncodedParameter {
+public class ContainerRequestParameter extends AbstractRequestParameter {
+
+ private final String value;
private byte[] content;
- EncodedRequestParameter(String encoding) {
+ ContainerRequestParameter(String value, String encoding) {
super(encoding);
- this.content = Util.NO_CONTENT;
+ this.value = value;
+ this.content = null;
}
- void setContent(byte[] content) {
- this.content = content;
- super.setEncoding(this.getEncoding());
+ @Override
+ void setEncoding(String encoding) {
+ super.setEncoding(encoding);
+ content = null;
}
/**
* @see org.apache.sling.api.request.RequestParameter#get()
*/
public byte[] get() {
- return this.content;
+ if (content == null) {
+ try {
+ content = getString().getBytes(getEncoding());
+ } catch (Exception e) {
+ // UnsupportedEncodingException, IllegalArgumentException
+ content = getString().getBytes();
+ }
+ }
+ return content;
}
/**
@@ -80,13 +92,14 @@
* @see org.apache.sling.api.request.RequestParameter#getString()
*/
public String getString() {
- return this.getEncodedString();
+ return value;
}
/**
* @see org.apache.sling.api.request.RequestParameter#getString(java.lang.String)
*/
- public String getString(String encoding) throws UnsupportedEncodingException {
+ public String getString(String encoding)
+ throws UnsupportedEncodingException {
return new String(this.get(), encoding);
}
@@ -102,19 +115,4 @@
return this.getString();
}
- protected String decode(byte[] data, String encoding) {
- if (encoding != null) {
- try {
- String value = new String(data, Util.ENCODING_DIRECT);
- return value; // URLDecoder.decode(value, encoding);
- } catch (UnsupportedEncodingException uue) {
- // not expected, use default encoding anyway ...
- } catch (IllegalArgumentException iae) {
- // due to illegal encoding in value, ignore for now
- }
- }
-
- // if still here, use platform default encoding
- return new String(data);
- }
}
Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java?rev=636559&r1=636558&r2=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/MultipartPostParameter.java Wed Mar 12 15:52:29 2008
@@ -27,11 +27,14 @@
/**
* The <code>MultipartRequestParameter</code> TODO
*/
-class MultipartRequestParameter extends AbstractEncodedParameter {
+class MultipartRequestParameter extends AbstractRequestParameter {
private final FileItem delegatee;
+
private String encodedFileName;
+ private String cachedValue;
+
/**
*
*/
@@ -44,6 +47,12 @@
this.delegatee.delete();
}
+ @Override
+ void setEncoding(String encoding) {
+ super.setEncoding(encoding);
+ cachedValue = null;
+ }
+
/**
* @see org.apache.sling.api.request.RequestParameter#get()
*/
@@ -98,23 +107,29 @@
public String getString() {
// only apply encoding in the case of a form field
if (this.isFormField()) {
- return this.getEncodedString();
- }
-
- return this.delegatee.getString();
- }
+ if (this.cachedValue == null) {
+ // try explicit encoding if available
+ byte[] data = get();
+ String encoding = getEncoding();
+ if (encoding != null) {
+ try {
+ this.cachedValue = new String(data, encoding);
+ } catch (UnsupportedEncodingException uee) {
+ // don't care, fall back to platform default
+ }
+ }
- protected String decode(byte[] data, String encoding) {
- if (encoding != null) {
- try {
- return new String(data, encoding);
- } catch (UnsupportedEncodingException uee) {
- // TODO: handle
+ // if there is no encoding, or an illegal encoding,
+ // use platform default
+ if (cachedValue == null) {
+ cachedValue = new String(data);
+ }
}
+
+ return this.cachedValue;
}
- // if there is no encoding, or an illegal encoding, use platform default
- return new String(data);
+ return this.delegatee.getString();
}
/**
@@ -136,6 +151,7 @@
return this.getString();
}
- return "File: " + this.getFileName() + " (" + this.getSize() + " bytes)";
+ return "File: " + this.getFileName() + " (" + this.getSize()
+ + " bytes)";
}
}
Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java?rev=636559&r1=636558&r2=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/ParameterSupport.java Wed Mar 12 15:52:29 2008
@@ -126,16 +126,8 @@
final String[] values = (String[]) entry.getValue();
for (int i = 0; i < values.length; i++) {
- final EncodedRequestParameter rp = new EncodedRequestParameter(
- Util.ENCODING_DEFAULT);
- try {
- rp.setContent(values[i].getBytes(Util.ENCODING_DEFAULT));
- } catch (UnsupportedEncodingException ue) {
- throw new Error(
- "Unexpected UnsupportedEncodingException for encoding="
- + Util.ENCODING_DEFAULT);
- }
- parameters.addParameter(name, rp);
+ parameters.addParameter(name, new ContainerRequestParameter(
+ values[i], Util.ENCODING_DEFAULT));
}
}
Modified: incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java?rev=636559&r1=636558&r2=636559&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java (original)
+++ incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/parameters/Util.java Wed Mar 12 15:52:29 2008
@@ -104,8 +104,8 @@
RequestParameter[] params = paramEntry.getValue();
String parName = null;
for (int i = 0; i < params.length; i++) {
- if (params[i] instanceof AbstractEncodedParameter) {
- AbstractEncodedParameter param = (AbstractEncodedParameter) params[i];
+ if (params[i] instanceof AbstractRequestParameter) {
+ AbstractRequestParameter param = (AbstractRequestParameter) params[i];
// fix encoding if different
if (param.getEncoding() == null) {