问题标签 [apache-commons-config]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
981 浏览

apache-commons-config - 如果找不到文件,如何进行空配置?

ConfigurationException使用 Apache Commons Configurations 1.9,如果找不到提供的文件,如何避免加载配置文件?

Spring 应用上下文类似于:

但是我的配置文件是可选的,所以我想确保应用程序正确启动,即使文件不存在。

如何使用 Commons Configurations 实现这一目标?AFactoryBean有效,但还有其他方法吗?

0 投票
3 回答
11644 浏览

java - 为什么 Maven 不解决公共配置的所有依赖项?

概括

XMLConfiguration configuration = new XMLConfiguration("config/config.xml");仅尝试时,commons-configuration 1.10我需要在我的 Maven 设置中添加更多依赖项(即commons-collections不比 更新)。3.2.1为什么会这样,为什么 Maven 不简单地解决所有需要的依赖项?

细节

我正在尝试让commons-configuration工作。首先,我想使用最新版本 2.0-alpha2,因为我无法配置 Maven 以下载正确的资源,所以它根本无法正常工作——但那是另一回事了。

在我发现 1.10 版实际上是“一点十”(不是“一点一零”),因此是最新版本的 commons-configuration 1 (并在教程中介绍)之后,我决定试一试.

对于我的 Maven 依赖项(集成在 Eclipse 中),我使用了:

但是,在尝试此示例时:

使用以下 config.xml:

我得到了错误:

我首先希望他们(当然不是我)只是搞砸了一些 maven 依赖项,因为我不会再打扰使用哪个版本了(我没有让 2.0 工作,记得吗?)我决定降级到版本1.9 通过将 maven 依赖项替换为:

这很好地解决了问题,测试用例正在运行:

但是,当我尝试实现与非常简单的 Apache-commons 配置示例中引用的示例类似的示例时,抛出 NoClassDefFoundError及其后续问题时,我得到了在那里引用的完全相同的错误 - 但解决方案,导入org.apache.commons.beanutils.PropertyUtils不起作用,因为我我想念beanutils。所以基本上通过降级,我只是从缺少集合的错误切换到缺少 beanutils。

有一个依赖项概述,您可以在其中查看执行操作时使用了哪些依赖项。得知 1.10 版现在CollectionUtils在构造函数调用中使用了 1.9 版以外的其他依赖项(即 ),我有点惊讶。由于在 1.10 和 1.9 中都存在依赖问题,我只是坚持使用较新的版本。

我发现CollectionUtils位于以下工件中(正如我在其maven 存储库中指出的那样):

可悲的是,一个(一开始对我来说并不明显)没有在 package 中定义类CollectionUtilscollections而是在 package 中collections4。在依赖项概述中暗示了这个问题,但他们只提到了早期版本可能存在的问题......我似乎不再考虑它了,而是简单地将依赖项更改为:

使用这些依赖项后,我得到了一切工作(或多或少,但我现在得到的异常不再取决于缺少的类定义):

为什么我必须自己添加依赖项?我认为使用 maven 的重点是避免必须做这些事情,并且就 javadocs 和源文件而言,它做得很好。

到目前为止,我确信依赖项不包含在设计层次结构中(是这样吗?),可能是为了避免开销。但是,有没有办法一次简单地获取所有依赖项,或者更好地获取我需要的所有依赖项?为什么要这样设计?

0 投票
2 回答
2818 浏览

java - Commons XMLConfiguration 和模式验证?

我使用 Apache Commons XMLConfiguration 进行配置。现在我需要一个基于模式的验证。但我无法将我的 xsd 添加到 XMLConfiguration。xsd 位于应用程序 jar 文件中。

如果我使用 Java SE 中的方法,验证运行不会出现问题:

但是,如果我将 XMLConfiguration 与 DefaultEntityResolver 一起使用,我就没有成功。

我得到以下异常:

“配置”是 config_default.xml 的根元素。我认为这意味着,它找不到 xsd。

我的第一个问题,我必须在 resolver.registerEntityId("configuration", urlXsd); 的第一个参数中输入什么?架构的公共 ID 是什么?该文档仅显示了一个带有 DTD public id 的示例。

这是简化的架构和 xml -> xml:

架构:

更新:我的测试基于 dbank 的回答:

现在我用无效的 xml 对其进行了测试,但我只看到输出错误。没有抛出异常。

更新 - xml 中 xsd 的路径: 我认为基于回调的处理不太好。根据您的第一个建议,我已经使用 xsd 的路径在 xml 中进行了测试。但这仅适用于任何路径。

第一次运行确实处理正确。它从基于 xsi:noNamespaceSchemaLocation="config_schema.xsd" 的 jar 中获取 xsd。然后将从 jar 加载的默认配置写入本地文件系统。我检查了书面文件,找不到奇怪的想法。然后我再次运行示例应用程序,但现在出现以下错误:

他找不到xsd,但是xml文件中的路径是正确的,和第一次运行一样。为什么他在第一次玩的时候能找到 xsd,而在第二次运行时却找不到?

第二个问题,是 XMLConfiguration 的所有可能的日志输出吗?

更新 3:我再次测试并查看,如果我将 xsd 放入本地文件系统,那么第二次运行没有问题。我认为问题是在 xml 中定义路径时对 xsd 的相对搜索。

是否可以从本地文件系统加载 xml 并使用 jar 文件中的模式进行验证?我在调用 load() 或 refresh() 时搜索没有回调和直接异常处理的解决方案。

此致,

0 投票
0 回答
826 浏览

java - 使用 Apache Commons Configuration 和 BeanUtils 从 XML 读取数组到 bean

在配置文件中,我有多个数组值,例如电话簿的名称。

我想通过 BeanHelper (或其他方式)将这些读入这个 bean:

或者理想情况下使用列表java.util.List<String>而不是数组String[]。接口的实现很简单:

主要看起来像这样:

这在尝试创建 bean 时不起作用,我得到一个ConfigurationRuntimeException由此引起的UnsupportedOperationException

我必须更改的第一件事是 XML 文件的布局,以匹配XMLBeanDeclarationXMLConfiguration的文档:

如果我运行该程序,它会正常终止,我的输出是:

这意味着XMLConfiguration正确标识了属性名称中具有数组的配置文件,但不知何故 XMLBeanDeclaration 没有。它总是只取最后一个值。

我想出了一个解决方案,它或多或少是通过滥用可以将数组读取为单个Strings 的事实。我添加了行config.setAttributeSplittingDisabled(true);。结果如下:

在这种情况下,似乎在创建 bean 时BeanHelper实现了数组并能够选择正确的方法。

由于这使我的配置有点不灵活,我想知道是否有可能XMLBeanDeclaration在早期阶段让 to 处理数组以避免调用config.setAttributeSplittingDisabled(true);?

我正在使用 Java 8、配置 1.10 和 BeanUtils 1.9.2。

0 投票
1 回答
1649 浏览

java - 如何在 Apache Commons 配置中保存用属性文件中的值填充的 xml 配置无法保存

我正在尝试在 groovy 脚本中使用 Apache Commons Configuration 从简单的属性文件中读取值,并使用该文件中的这些值填充 XML 模板。此示例的目标是能够使用属性文件中定义的设置启动多个 Tomcat 实例。尽管 Apache Commons Configuration 框架很怪异,但它被选中是因为它能够开箱即用地读取/写入/验证不同的配置类型。

模板是一段tomcat的server.xml:

和属性文件(比如说 tomcat.properties):

我使用 DefaultConfigurationBuilder 将这些文件组合到配置中。定义文件正在动态创建。代码:

保存的文件与上面的 server.xml 相同。例如,使用 port="${tomcat.server.port}" 有没有办法用属性文件中的值保存它?

0 投票
1 回答
1662 浏览

maven - 无法在 Maven Web 项目中使用 Commons Configuration 读取 config.properties

我正在尝试使用 Commons-configuration api 为我的 maven Web 项目读取放置在 src/main/resources 文件夹中的 config.properties 文件。对于普通的 maven 项目,我可以毫无问题地使用它,但在 web 项目中,这不知何故不起作用。这是我的 pom.xml

我正在使用下面的代码阅读这个文件

我是否错过了 pom.xml 中的任何内容。请帮忙!

0 投票
0 回答
612 浏览

java - 如何使用 apache commons 从流中加载 xml 配置?

我想使用 apache commons configuration 1.10 来管理 xml 配置。

我的配置在远程服务器中,所以我需要从流中读取它。

类似的东西有从流中读取的java.util.Properties方法。load

检查文档我没有找到任何可以帮助我的东西。

谁能帮助我如何获得所需的输出?

0 投票
1 回答
455 浏览

java - 使用 Apache commos 配置针对 xsd 验证 xml

我是 XML 的新手。

我使用 Apache Commons XMLConfiguration 进行配置。

我需要一个基于模式的验证。

xsd 位于我的 java 项目的资源文件夹中。

xml 和 xsd 不在同一位置

遵循文档(仅报告 DTD 的示例)。我产生以下代码:

我得到以下异常:

我的 config.xsd:

我的 config.xml

谁能帮我?

0 投票
1 回答
667 浏览

java - Apache commons config:从默认值生成配置文件

我想在一个 jar 中分发我的应用程序。这意味着我不想随它附带任何外部文件,这也包括我不想随我的项目附带默认配置文件。

我当然可以使用 JDOM2 的实现来构建基本的 XML 结构,或者将其从类路径复制到文件系统中,但是 Commons Configuration 实现了开箱即用的变体吗?

我只找到了解释阅读和处理现有配置文件的在线文档。

我会想象这段代码会接受一些键 - >值对,然后生成一个新的配置,这可能吗?

请不要为我提供 XML 文件的任何替代方案,请专门针对我询问的实现回答这个问题。如果您知道任何信息,您可以建议一个替代 Commons Configuration 的方法来完成我需要做的事情。

0 投票
1 回答
9025 浏览

java - 如何在运行时设置 logback 配置文件?

我想在我的暂存环境中有一个用于生产的 logback.xml 文件和另一个具有不同参数的文件。我的代码能够在运行时自动知道它是在生产还是运行时。有没有办法在运行时设置 logback 配置文件?