2016-12-21 4 views
1

私は私のblueprint.xmlで定義された/格納されたプロパティを使用しています:プログラム的

<cm:property-placeholder id="props.placeholder" persistent-id="props.blueprint"> 
    <cm:default-properties> 
     ... 
     <cm:property name="time.daysHistory" value="4" /> 
    </cm:default-properties> 
</cm:property-placeholder> 

私は、注射(@PropertyInject)を介して、またはこの構文{{time.daysHistory}}でこのプロパティを使用しています。

私のBluprinttestsからこれらの特質を読んだり、設定したりする方法はありますか? context.getProperties()を試しましたが、空のマップが返されます。

答えて

0

ユニットテストで使用できるloadConfigAdminConfigurationFileおよびuseOverridePropertiesWithConfigAdminの方法については、ドキュメント:http://camel.apache.org/using-propertyplaceholder.htmlを参照してください。

+0

これが機能していません。 '' useOverridePropertiesWithConfigAdmin''で与えられたディクショナリのサイズは0です。そして、blueprint.xmlで与えられた値は引き続き使用されます。 - 私は、私のテストの中からblueprint.xmlで与えられた値を上書きしたい/読みたい。 – dermoritz

2

Clausと同様にuseOverridePropertiesWithConfigAdminメソッドを使用する必要があります。ただし、青写真に設定されているのと同じpid値を返す必要があります。

あなたの青写真:あなたのテストの追加

<cm:property-placeholder id="props.placeholder" persistent-id="props.blueprint"> 
    <cm:default-properties> 
     ... 
     <cm:property name="time.daysHistory" value="4" /> 
    </cm:default-properties> 
</cm:property-placeholder> 

@Override 
protected String useOverridePropertiesWithConfigAdmin(Dictionary props) { 
props.put("time.daysHistory", "1"); 
return "props.blueprint"; 
} 

EDIT:私のルートで

私が注入されたプロパティ:ここに が、私はそれを行っている方法です

@PropertyInject("DatasetConsumePath") 
    private String datasetConsumePath; 
    @PropertyInject("DatasetFileExtension") 
    private String datasetFileExtension; 

私の青写真:

<cm:property-placeholder id="test" persistent-id="test" update-strategy="reload"> 
    <cm:default-properties> 
     <cm:property name="DatasetConsumePath" value="test"/> 
     <cm:property name="DatasetFileExtension" value="txt"/> 
     <cm:property name="DatasetAggregateBatchSize" value="1000"/> 
    </cm:default-properties> 
    </cm:property-placeholder> 

私のテスト:

@Override 
    protected String useOverridePropertiesWithConfigAdmin(Dictionary props) { 
    // add the properties we want to override 
    props.put("DatasetConsumePath", "src/test/resources/test files/test/"); 

    // return the PID of the config-admin we are using in the blueprint xml file 
    return "test"; 
    } 
+0

これは機能しません。 @PropertyInjectで注釈されたものを含むフィールドやメソッドの注入は、 "useOverridePropertiesWithConfigAdmin"の呼び出しの前に行われます。前述のように、与えられたpropsオブジェクトは、メソッドが呼び出されると常に0のサイズを持ちます。 – dermoritz

+0

あなたは正しいpersistent-idを返すことを確信していますか?あなたはあなたのテストコードとあなたがプロパティを行うコードを貼り付けることができますか?私は最近、最近似たようなことをしてくれて、それは私のために働く。私はそれを私のテストと比較することができます。 –

+0

はい、私は確信していますが、主な問題は、プロパティがオーバーライドされたメソッドの呼び出しの前に注入されることです。それで、ここで設定したもの(正しいかどうか)は無視されます。ラクダがそれらを注入する前にプロパティを変更する必要があります - 私はラクダのライフサイクルに精通していません。 – dermoritz