2016-06-15 4 views
1

これはちょっと箱入りですが、メソッドへの入力を追跡し、別のクラスで使用されている場所を追跡するという要件があります。コードをリファクタリングして変更することができれば、これを行うには良い方法がありますか?マッピングによって正確性が維持されていることを確認したいのですか?別のクラスを呼び出すときに変数が使用される場所のトラッキング

// doSomething is under my control 
@Endpoint("testEndpoint") 
public void doSomething(String name, int age, String surname) { 

    String fullName = name + " " + surname; 

    // SendRequest is generated code (not under my control) 
    SendRequest sr = new SendRequest(); 
    sr.setFullName(fullName); 
    sr.setUserAge(age) 
    this.sender.send(sr); 

} 

そこで彼らは、私は、実行時およびメソッドが実行される前にこの情報が必要

testEndpoint 
    INPUT <> OUTPUT 
    --------------- 
    name -> fullName 
    age -> userAge 
    surname -> fullName 

かもしれない出力リレー。私の現在の解決策はDozerからインスパイアされ、リフレクションとカスタム注釈付き変換クラスを使用して、実行時に依存関係を集めてこの情報を取り出すことができます。つまり、タイプセーフな言語をタイプの安全でない言語に変えます。

もっと良い解決策があるのか​​、そういうライブラリがあるのか​​不思議です。

+0

これにはlog4jを使用できます。出力ファイルを出力ファイルとして使用します。 – Azodious

+0

しかし、これはメソッドが実行されることを必要とするでしょう、私はこの情報がその前にある必要があります。 – jax

+0

@Azodiousあなたはもう少し詳しくlog4j解を工夫できますか? – jax

答えて

0

AspectJはどうですか?

引数をキャプチャするメソッドと一致するポイントカットを定義し、引数値が何であれ実際にキャプチャして保存、追跡するアドバイスを定義できます。

public aspect ExampleAspect { 

    pointcut doSomething() : call(public void doSomething(String,int,String)); 

    before(): doSomething(){ 
    System.out.println("INPUT <> OUTPUT"); 
    System.out.println("---------------"); 
    System.out.println("name -> "+ this.JoinPoint.getArgs[0]); 
    System.out.println("age -> "+ this.JoinPoint.getArgs[1]); 
    System.out.println("surname -> "+ this.JoinPoint.getArgs[2]); 
    } 

} 
+0

私は側面を考えましたが、私は反対の情報が必要です。私は値を気にしない、私は出力名に一致する入力名が欲しい。 – jax

+0

私の場合、REST API出力からWebServices APIへの入力があります。どの入力がどの出力に影響するかを追跡しようとしています。 – jax

関連する問題