You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2010/02/24 18:36:01 UTC
svn commit: r915886 -
/labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java
Author: simonetripodi
Date: Wed Feb 24 17:36:00 2010
New Revision: 915886
URL: http://svn.apache.org/viewvc?rev=915886&view=rev
Log:
added the message parameters for base string building
TODO: oauth parameters extraction must be optimized
Modified:
labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java
Modified: labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java
URL: http://svn.apache.org/viewvc/labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java?rev=915886&r1=915885&r2=915886&view=diff
==============================================================================
--- labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java (original)
+++ labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java Wed Feb 24 17:36:00 2010
@@ -16,6 +16,7 @@
*/
package org.apache.labs.amber.signature.signers;
+import java.lang.reflect.Field;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
@@ -25,6 +26,7 @@
import org.apache.commons.codec.net.URLCodec;
import org.apache.labs.amber.signature.descriptors.Service;
+import org.apache.labs.amber.signature.message.OAuthParameter;
import org.apache.labs.amber.signature.message.RequestMessage;
import org.apache.labs.amber.signature.parameters.Parameter;
@@ -213,11 +215,46 @@
// parameter normalization
List<Parameter> parametersList = new ArrayList<Parameter>();
- // TODO add the message parameters
+ // add the message parameters
+ Class<?> klass = message.getClass();
+ // traverses the class hierarchy
+ // TODO optimize it
+ while (Object.class != klass) {
+ for (Field field : klass.getDeclaredFields()) {
+ if (field.isAnnotationPresent(OAuthParameter.class)) {
+ OAuthParameter oAuthParameter = field.getAnnotation(OAuthParameter.class);
+ if (oAuthParameter.includeInSignature()) {
+ field.setAccessible(true);
+ try {
+ Object fieldValue = field.get(message);
+
+ if (fieldValue == null && !oAuthParameter.optional()) {
+ throw new SignatureException(new StringBuilder("OAuth parameter '")
+ .append(oAuthParameter.name())
+ .append("' specified in '")
+ .append(field)
+ .append("' is not optional")
+ .toString());
+ }
+
+ encodeAndAddParameter(oAuthParameter.name(), String.valueOf(fieldValue), parametersList);
+ } catch (Exception e) {
+ throw new SignatureException(new StringBuilder("An error occurred while getting '")
+ .append(field)
+ .append("' value, see nested exception")
+ .toString(), e);
+ }
+ field.setAccessible(false);
+ }
+ }
+ }
+
+ klass = klass.getSuperclass();
+ }
// add the user parameters
for (Parameter parameter : parameters) {
- encodeAndAddParameter(parameter, parametersList);
+ encodeAndAddParameter(parameter.getName(), parameter.getValue(), parametersList);
}
// now serialize the normalized parameters
@@ -260,13 +297,13 @@
* @param parameter the input parameter.
* @param parametersList the list where add the parameter.
*/
- private static void encodeAndAddParameter(Parameter parameter, List<Parameter> parametersList) {
- Parameter encodedParameter = new Parameter(percentEncode(parameter.getName()), percentEncode(parameter.getValue()));
- int paramIndex = Collections.binarySearch(parametersList, encodedParameter);
+ private static void encodeAndAddParameter(String name, String value, List<Parameter> parametersList) {
+ Parameter parameter = new Parameter(percentEncode(name), percentEncode(value));
+ int paramIndex = Collections.binarySearch(parametersList, parameter);
if (paramIndex < 0) {
paramIndex = -paramIndex - 1;
}
- parametersList.add(paramIndex, encodedParameter);
+ parametersList.add(paramIndex, parameter);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org