[
https://issues.apache.org/jira/browse/JDO-507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12511304
]
Craig Russell commented on JDO-507:
-----------------------------------
Here's a sample of the code needed to reflectively invoke methods:
protected void setAddrid(Object obj, long addrid) {
set (obj, addrid, "setAddrid");
}
protected void set(Object obj, long value, String methodName) {
Method method = getMethod(obj, methodName, long.class);
invokeMethod(method, obj, value);
}
protected Map<Class, Map<String, Method>> classMethodMap =
new HashMap<Class, Map<String, Method>>();
protected Method getMethod(Object obj, String methodName,
Class parameterClass) {
Class clazz = obj.getClass();
Map<String, Method> methodMap = classMethodMap.get(clazz);
if (methodMap == null) {
methodMap = new HashMap<String, Method>();
classMethodMap.put(clazz, methodMap);
}
Method result = methodMap.get(methodName);
if (result == null) {
try {
result = clazz.getMethod(methodName, parameterClass);
methodMap.put(methodName, result);
} catch (NoSuchMethodException ex) {
throw new RuntimeException("Unable to find method " +
methodName + "in class " + clazz.getName(), ex);
}
}
return result;
}
private void invokeMethod(Method method, Object obj, Object value) {
try {
method.invoke(obj, value);
} catch (IllegalArgumentException ex) {
throw ex;
} catch (IllegalAccessException ex) {
throw new RuntimeException("Illegal Access", ex);
} catch (InvocationTargetException ex) {
throw new RuntimeException("Invocation Target", ex);
}
}
> Completeness test for persistent interface fails with annotations
> ------------------------------------------------------------------
>
> Key: JDO-507
> URL: https://issues.apache.org/jira/browse/JDO-507
> Project: JDO
> Issue Type: Task
> Components: tck2
> Affects Versions: JDO 2 maintenance release 1
> Reporter: Michelle Caisse
> Attachments: jdo-507.patch
>
>
> Annotations on persistent interfaces have not yet been implemented by jpox. I
> have added the test to configurations.list, so it gets run on any complete
> test run, but I have not yet added the classes to the list of jdo metadata
> files in project.properties because that causes enhancement to fail.
> Therefore, the test currently gives the following error:
> [java] Class org.apache.jdo.tck.pc.companyAnnotatedDS.PICompany has field
> org.apache.jdo.tck.pc.companyAnnotatedDS.PICompany.address declared in
> MetaData, but this field doesnt exist in the class!
> [java] org.jpox.metadata.InvalidMetaDataException: Class
> org.apache.jdo.tck.pc.companyAnnotatedDS.PICompany has field
> org.apache.jdo.tck.pc.companyAnnotatedDS.PICompany.address declared in
> MetaData, but this field doesnt exist in the cl
> ass!
> ...
> When the feature is implemented, project.properties must be edited to include
> PI*.class in the list for enhancement.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.