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: [email protected]
For additional commands, e-mail: [email protected]