2017-04-11 12 views
1

私はConfigurationProviderBuilderを作成するいくつかのJavaコードを持っています。ネストされたyaml構造体をJavaのConfigurationProviderBuilderにマップするにはどうすればよいですか?

private static ExampleConf conf(String confFile) { 
    ConfigFilesProvider configFilesProvider = 
      () -> Arrays.asList(Paths.get(confFile).toAbsolutePath()); 

    // use local files as config source 
    ConfigurationSource source = 
      new FilesConfigurationSource(configFilesProvider); 

    // create provider 
    return new ConfigurationProviderBuilder() 
      .withConfigurationSource(source) 
      .build() 
      .bind("", ExampleConf.class); 

} 

ExampleConfこの

public interface ExampleConf { 
    String host(); 
    int port(); 
    String certFile(); 
} 

そして最後のように見え、実際の設定ファイルはこの

host: localhost 
port: 8980 
certFile: /usr2/certs/ca/ca.crt 

のように見えるこれは十分に簡単ですが、今私は、ネストされた構造を作成したいですyaml設定ファイル。このようなもの

paths: 
    - name: path one 
    columns: 
     - foo 
     - bar 
    - name: path two 
    columns: 
     - mario 
     - luigi 

ExampleConfで使用するために、このコードをJavaコードに変換するにはどうすればよいですか?私はまだJavaを使用速度まで取得しています

、これはPythonで私のために非常に簡単になります。

答えて

1

試してみてください。

public interface ExampleConf { 
    public interface MyObject { 
     String name(); 
     List<String> columns(); 
    }   

    List<MyObject> paths(); 
} 
+0

ねえ、これは良いアイデアのように思えます。私は今エラーでヒットしています **スレッド "main"の例外java.lang.IllegalArgumentException: 'path one、path two'の値をキャストすることができません** – Zack

+0

バインディングに問題があります。これは近くにあるようだ。 – Zack

+0

私はcfg4jの経験がありません。もしこれを行う必要があれば、おそらくSnakeYamlの直列化解除機能を使用します。私はcfg4jの抽象化がそれに追加するものが不明です。 – flyx

関連する問題