Talend Open Studioのカスタムコンポーネントを構築して、すべてのデータを取得するラッパーを持つアプリケーション(JIRA)からデータのソースにアクセスします。すべてのデータ構造に対して非常に揮発性の高いゲッターでいっぱいのAPIを公開します。Talend Open Studioはプリミティブ型のみをサポートしているため、通常、プリミティブデータを取得するには、いくつかの呼び出しをチェーンする必要があります(つまり、Project.getProjectDetail()。getOwner()。getName())
しかし、これらのAPIはさまざまであることが多く、毎回コードを変更したくありません。そこで、メソッドの列挙を使用することにしました。新しいフィールドが公開されたら、列挙に要素を追加するだけで済みます。そんな感じ:
(私は簡潔にするためにほとんどの要素をカットしました)
public enum JiraProjectField {
KEY(new String[]{"getKey"}),
COMPONENTS_NUM(new String[]{"getComponents", "size"}),
private Method[] m;
private ArrayList<Class<?>> r;
private JiraProjectField(String[] methods) {
this.r = new ArrayList<Class<?>>(methods.length);
Class<?> initClass = Project.class;
for(int i=0; i< methods.length; i++){
try {
m[i] = initClass.getMethod(methods[0], (Class<?>)null);
r.add(m[i].getReturnType());
initClass = m[i].getReturnType();
} catch (SecurityException e) {
throw new ExceptionInInitializerError(e.toString());
} catch (NoSuchMethodException e) {
throw new ExceptionInInitializerError(e.toString());
}
}
}
ただし、その名前のメソッドが存在すると確信している場合でも、常にNoSuchMethodExceptionが発生します。わからないことはありますか?