0

いくつかのプロパティ構成といくつかの XMLConfigurations を持つ CompositeConfiguration オブジェクトがあります。XMLConfiguration の場合、DefaultExpressionEngine は XPathExpressionEngine として設定されます。

.properties ファイルの 1 つに、「.」で始まるプロパティがあります。例: .propertyName="名前"

CompositeConfiguration compositeConfiguration = new CompositeConfiguration();

XMLConfiguration xmlConfig = new XMLConfiguration("xmlFile.xml");
xmlConfig.setDefaultExpressionEngine(new XPathExpressionEngine());

compositeConfiguration.addConfiguration(xmlConfig);

compositeConfiguration.addConfiguration(new PropertiesConfiguration(new File("file1.properties")));
compositeConfiguration.addConfiguration(new PropertiesConfiguration(new File("file2.properties")));
compositeConfiguration.addConfiguration(new PropertiesConfiguration(new File("file3.properties"))); 
compositeConfiguration.getProperty(".propertyName");

次の例外が発生します。

org.apache.commons.jxpath.JXPathInvalidSyntaxException: Invalid XPath: '.propertyName'. Syntax error after "."
at org.apache.commons.jxpath.ri.Parser.parseExpression(Parser.java:63)
at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.compileExpression(JXPathContextReferenceImpl.java:249)
at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.iteratePointers(JXPathContextReferenceImpl.java:616)
at org.apache.commons.jxpath.JXPathContext.selectNodes(JXPathContext.java:686)
at org.apache.commons.configuration.tree.xpath.XPathExpressionEngine.query(XPathExpressionEngine.java:183)
at org.apache.commons.configuration.HierarchicalConfiguration.fetchNodeList(HierarchicalConfiguration.java:958)
at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.fetchNodeList(AbstractHierarchicalFileConfiguration.java:439)
at org.apache.commons.configuration.HierarchicalConfiguration.getProperty(HierarchicalConfiguration.java:344)
at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.getProperty(AbstractHierarchicalFileConfiguration.java:392)
at org.apache.commons.configuration.HierarchicalConfiguration.containsKey(HierarchicalConfiguration.java:725)
at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.containsKey(AbstractHierarchicalFileConfiguration.java:360)
at org.apache.commons.configuration.CompositeConfiguration.getProperty(CompositeConfiguration.java:261)

この例外は、CompositeConfiguration が各構成を通過し、この場合は ".propertyName" であるキーを使用してその構成で getProperty を呼び出すためです。XPathExpression Engine を使用して XMLConfiguration から値を取得すると、無効な xpath が表示されて壊れます。

これは、簡単に可能/一般的なシナリオのようです。他の誰かが同様の問題に直面していますか? この問題を回避する方法はありますか?

私が使用できる他の構成タイプはありますか? 最初に読み込まれたプロパティを優先して使用したいので、 CompositeConfiguration を使用しています。

どんなヒントでも私に大いに役立ちます。

ありがとう、テジャス

4

1 に答える 1