diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONUserInfoView.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONUserInfoView.java index b58a48fb3..59bf0c1ef 100644 --- a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONUserInfoView.java +++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JSONUserInfoView.java @@ -17,6 +17,8 @@ package org.mitre.openid.connect.view; import java.io.IOException; import java.io.Writer; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Map; import java.util.Set; @@ -30,6 +32,7 @@ import org.springframework.stereotype.Component; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.web.servlet.view.AbstractView; +import com.google.common.base.CaseFormat; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; @@ -176,8 +179,32 @@ public class JSONUserInfoView extends AbstractView { for (JsonElement i : claims) { String claimName = i.getAsString(); if (!obj.has(claimName)) { - //TODO is there some way to do Java reflection for this? - obj.addProperty(claimName, "value"); + String value = ""; + //Process claim names to go from "claim_name" to "ClaimName" + String camelClaimName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, claimName); + //Now we have "getClaimName" + String methodName = "get" + camelClaimName; + Method getter = null; + try { + getter = ui.getClass().getMethod(methodName, (Class)null); + value = (String) getter.invoke(ui, (Object[])null); + obj.addProperty(claimName, value); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchMethodException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } }