2012-04-17 87 views
2

Javaアプリケーション(特に私の統合テスト)を構成しようとしていますが、まったく成功しませんでした。私はもともと、問題なくロードして使用できる単一のXMLConfigurationを持っていました。私のディレクトリの設定は次のようになります。Apache Commonsの設定 - 設定ファイルをロード/使用できない

  • SRC
    • テスト
      • javaの
        • mypackageと
      • リソースを

以前は、リソースディレクトリにmyconfig.xmlファイルがありました。私は、ユーザーが/ etcまたは/家庭または任意に設定ファイルを書き込むことにより、アプリケーション自身を構成することができるようにそれを作るしようとしている今

private static XMLConfiguration configuration = null; 
public static void configure() { 
    try { 
     configuration = new XMLConfiguration("myconfig.xml"); 
    } 
    catch (ConfigurationException e) { 
     System.err.println(e); 
    } 
} 

ので、私は新しいを作った:私はそうのようにそれにそれをロードしましたコンフィグ-のtest.xmlと呼ばれる同じ場所にファイル:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<configuration> 
    <!-- Attempt to load configuration provided on the system --> 
    <xml fileName="/etc/myconf/myconfig.xml" config-optional="true" /> 

    <!-- Load default configuration from the classpath --> 
    <xml fileName="myconfig.xml" /> 
</configuration> 

ファイル/etc/myconf/myconfig.xmlは存在しませんが、それはそれは、オプションの作りの全体のポイントです。ドキュメントをどのように処理するかなど、設定をロードするためのいくつかの異なる方法を試しました。http://commons.apache.org/configuration/userguide/howto_configurationbuilder.html私は現在持っていることは以下の通りです:私は私の統合テストを実行すると

private static CombinedConfiguration configuration = null; 
public static void configure() { 
    try { 
     DefaultConfigurationBuilder builder = 
      new DefaultConfigurationBuilder("config-test.xml"); 
     configuration = builder.getConfiguration(true); 
     System.err.println("Yay"); 
    } 
    catch (ConfigurationException e) { 
     System.err.println("Herp"); 
    } 
    catch (Exception e) { 
     System.err.println("Derp"); 
    } 
} 

、私は何もイェーイを見ていない、私はHerpのを見ていないと私はDERPを見ていません。物を読み込もうとする前にprintlnを置くと、それが印刷されてconfigureが呼び出されます。私はコモンズの設定金額から取得出力:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running TestSuite 
13:36:57.752 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is config-test.xml 
13:36:57.753 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file config-test.xml at null: no protocol: config-test.xml 
13:36:57.756 [main] DEBUG o.a.c.c.ConfigurationUtils - Loading configuration from the context classpath (config-test.xml) 
13:36:57.766 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Creating configuration null with name null 
13:36:57.795 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is config-test.xml 
13:36:57.795 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file config-test.xml at null: no protocol: config-test.xml 
13:36:57.796 [main] DEBUG o.a.c.c.ConfigurationUtils - Loading configuration from the context classpath (config-test.xml) 
13:36:57.800 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Creating configuration null with name null 
Tests run: 56, Failures: 2, Errors: 0, Skipped: 16, Time elapsed: 2.589 sec <<< FAILURE! 

Results : 

Failed tests: initialize(mypackage.ImportTestIT): org/apache/commons/beanutils/PropertyUtils 
    initialize(mypackage.TransferTestIT): org/apache/commons/beanutils/PropertyUtils 

Tests run: 56, Failures: 2, Errors: 0, Skipped: 16 

は、これらの方法は、ちょうどロードされた構成からデータを取得しようとし、その後configureを呼び出すとされている初期化します。私はこれで数時間働いていて、実際にもう一組の目を使うことができました。何か案は?私はこれに影響を与えることは言及していないと私は変更することができた何かがありますか?ありがとう。

編集#1(13:58):確認々BeanUtilsを行った後、クラスパス上にあった、私は今ようにというように

Running TestSuite 
14:00:16.088 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is config-test.xml 
14:00:16.089 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file config-test.xml at null: no protocol: config-test.xml 
14:00:16.093 [main] DEBUG o.a.c.c.ConfigurationUtils - Loading configuration from the context classpath (config-test.xml) 
14:00:16.103 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Creating configuration null with name null 
14:00:16.178 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is file:///home/pgarrity/projects/myproject/target/test-classes/config-test.xml, name is /etc/myconf/myproject/myconfig.xml 
14:00:16.179 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file /etc/myconf/myproject/myconfig.xml at file:///home/pgarrity/projects/myproject/target/test-classes/config-test.xml: /etc/myconf/myproject/myconfig.xml (No such file or directory) 
14:00:16.181 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Load failed for optional configuration xml: Cannot locate configuration source /etc/myconf/myproject/myconfig.xml 
14:00:16.185 [main] WARN o.a.c.c.DefaultConfigurationBuilder - Internal error 
org.apache.commons.configuration.ConfigurationException: Cannot locate configuration source /etc/myconf/myproject/myconfig.xml 
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:259) ~[commons-configuration-1.8.jar:1.8] 
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:238) ~[commons-configuration-1.8.jar:1.8] 

で始まり、スタックトレースの残忍な爆発を取得します。 ..しかし、私は今、「よー」と思う。 今私が得意でないことは、私の非オプション設定ソースを探しているように見えないか、見た目に言わなかった場所にいると仮定しているようです。

編集#2: 私は私の出力を介してビットより多くの、私は最終的に正しいファイルを読み込むように見えたことがわかっコモンズからの苦情に埋もれて見えました。私はそれが働くかもしれないと思う?多分、このようにロードするとプロパティへの私のパスが変わります。私は試してみるべきことがいくつかあります。とにかく、私が尋ねた問題は修正されました。助けてくれてありがとう。

答えて

3

クラスパスにcommons-beanutilsがないようです。瓶があることを確認してください。

+0

奇妙な、この綿密なメッセージが表示されます。私は私のために私の依存関係を扱うのに慣れていましたが、そこにはありませんでした - 私はそれを特に依存関係を追加し、それは間違いなく何かを変えました。ありがとう! –

+1

私はこのクラスのutilsをクラスパスに持っていますが、問題はまだ@Bozhoです – Napster

1

Pfft。 multi-page documentでは、設定ファイルを読み込む方法について説明しています。しかし、c:\ Users \ USER \ FOO \ bar.xmlのような絶対的なWindowsパスにファイルURLの検出を実装することを忘れましたか?コモンズ1.9は

DEBUG DefaultFileSystem - Could not locate file C:\Users\USER\FOO\bar.xml at null: unknown protocol: c 

https://github.com/apache/commons-configuration/blob/CONFIGURATION_1_9/src/main/java/org/apache/commons/configuration/DefaultFileSystem.java#L281

関連する問題