MUnits 失败并显示“已为名称 token-manager-store-tokenManagerConfig-System_API_Config 定义了对象存储”

问题描述

我使用 Anypoint 生成的连接器从我的主要 Mule API 调用其他 API。 通过模拟连接器并使用 munit:store 将有效负载存储到密钥并从密钥中检索以进行验证来运行 munits 时,我收到此错误

已为名称 token-manager-store-tokenManagerConfig-System_API_Config 定义了对象存储

有人能解释一下可能导致此问题的原因吗?

这是完整的错误

INFO  2021-03-10 20:31:36,919 [munit.01] org.mule.munit.runner.remote.api.server.RunnerServer: {} Waiting for client connection 
INFO  2021-03-10 20:31:36,919 [munit.01] org.mule.munit.runner.remote.api.server.RunnerServer: {} Client connection received from view-localhost - true
INFO  2021-03-10 20:31:37,082 [munit.01] org.mule.runtime.core.privileged.lifecycle.AbstractLifecycleManager: {} Stopping Bean: org.mule.runtime.module.extension.internal.runtime.config.DynamicConfigurationProvider-Logging_Config_in_Error_Handlers
INFO  2021-03-10 20:31:37,085 [munit.01] org.mule.runtime.core.privileged.lifecycle.AbstractLifecycleManager: {} disposing Bean: org.mule.runtime.module.extension.internal.runtime.config.DynamicConfigurationProvider-Logging_Config_in_Error_Handlers
INFO  2021-03-10 20:31:37,089 [munit.01] org.mule.runtime.core.privileged.lifecycle.AbstractLifecycleManager: {} Stopping Bean: org.mule.runtime.module.extension.internal.runtime.config.ConfigurationProviderToolingAdapter-system-api-httpreq-config-System_API_Config
INFO  2021-03-10 20:31:37,090 [munit.01] org.mule.runtime.core.privileged.lifecycle.AbstractLifecycleManager: {} disposing Bean: org.mule.runtime.module.extension.internal.runtime.config.ConfigurationProviderToolingAdapter-system-api-httpreq-config-System_API_Config
INFO  2021-03-10 20:31:37,093 [munit.01] org.mule.runtime.core.privileged.lifecycle.AbstractLifecycleManager: {} Stopping Bean: org.mule.runtime.module.extension.internal.runtime.config.ConfigurationProviderToolingAdapter-SNowflake_E2E_Database_Config
INFO  2021-03-10 20:31:37,093 [munit.01] org.mule.runtime.core.privileged.lifecycle.AbstractLifecycleManager: {} disposing Bean: org.mule.runtime.module.extension.internal.runtime.config.ConfigurationProviderToolingAdapter-SNowflake_E2E_Database_Config
org.mule.runtime.api.exception.MuleRuntimeException: org.mule.runtime.api.lifecycle.LifecycleException: Failed to invoke lifecycle phase "initialise" on object: org.mule.extension.oauth2.api.tokenmanager.TokenManagerConfig$$EnhancerBycglib$$edc0e215@748b8fa2
Caused by: org.mule.runtime.api.lifecycle.LifecycleException: Failed to invoke lifecycle phase "initialise" on object: org.mule.extension.oauth2.api.tokenmanager.TokenManagerConfig$$EnhancerBycglib$$edc0e215@748b8fa2
Caused by: java.lang.IllegalArgumentException: An Object Store was already defined for name token-manager-store-tokenManagerConfig-System_API_Config
       at org.mule.runtime.core.internal.util.store.MuleObjectStoreManager.createObjectStore(MuleObjectStoreManager.java:127)
       at org.mule.extension.oauth2.api.tokenmanager.TokenManagerConfig.initialise(TokenManagerConfig.java:103)
       at org.mule.runtime.core.api.lifecycle.LifecycleUtils.initialiseIfNeeded(LifecycleUtils.java:56)
       at org.mule.runtime.core.api.util.func.CheckedConsumer.accept(CheckedConsumer.java:19)
       at org.mule.runtime.core.internal.lifecycle.phases.DefaultLifecyclePhase.applyLifecycle(DefaultLifecyclePhase.java:115)
       at org.mule.runtime.core.internal.lifecycle.phases.MuleContextinitialisePhase.applyLifecycle(MuleContextinitialisePhase.java:73)
       at org.mule.runtime.config.internal.SpringRegistryLifecycleManager$SpringContextinitialisePhase.applyLifecycle(SpringRegistryLifecycleManager.java:128)
       at org.mule.runtime.core.internal.lifecycle.RegistryLifecycleManager.doApplyLifecycle(RegistryLifecycleManager.java:175)
       at org.mule.runtime.core.internal.lifecycle.RegistryLifecycleManager.applyPhase(RegistryLifecycleManager.java:146)
       at org.mule.runtime.config.internal.SpringRegistry.applyLifecycle(SpringRegistry.java:289)
       at org.mule.runtime.core.internal.registry.MuleRegistryHelper.applyLifecycle(MuleRegistryHelper.java:339)
       at org.mule.runtime.config.internal.LazyMuleArtifactContext.initializeComponents(LazyMuleArtifactContext.java:285)
       at org.mule.runtime.config.internal.LazyMuleArtifactContext.lambda$applyLifecycle$4(LazyMuleArtifactContext.java:248)
       at org.mule.runtime.core.internal.context.DefaultMuleContext.withLifecycleLock(DefaultMuleContext.java:531)
       at org.mule.runtime.config.internal.LazyMuleArtifactContext.applyLifecycle(LazyMuleArtifactContext.java:246)
       at org.mule.runtime.config.internal.LazyMuleArtifactContext.initializeComponents(LazyMuleArtifactContext.java:327)
       at org.mule.runtime.config.internal.LazyMuleArtifactContext.initializeComponents(LazyMuleArtifactContext.java:315)
       at org.mule.munit.runner.config.TestComponentLocator.initializeComponents(TestComponentLocator.java:63)
       at org.mule.munit.runner.model.builders.SuiteBuilder.build(SuiteBuilder.java:78)
       at org.mule.munit.runner.remote.api.server.RunMessageHandler.buildSuite(RunMessageHandler.java:108)
       at org.mule.munit.runner.remote.api.server.RunMessageHandler.parseSuiteMessage(RunMessageHandler.java:94)
       at org.mule.munit.runner.remote.api.server.RunMessageHandler.parseAndRun(RunMessageHandler.java:81)
       at org.mule.munit.runner.remote.api.server.RunMessageHandler.handle(RunMessageHandler.java:75)
       at org.mule.munit.runner.remote.api.server.RunnerServer.handleClientMessage(RunnerServer.java:145)
       at org.mule.munit.runner.remote.api.server.RunnerServer.run(RunnerServer.java:91)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at org.mule.service.scheduler.internal.AbstractRunnableFutureDecorator.doRun(AbstractRunnableFutureDecorator.java:111)
       at org.mule.service.scheduler.internal.RunnableFutureDecorator.run(RunnableFutureDecorator.java:54)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
       at java.lang.Thread.run(Thread.java:748)

更新:以下是 munit 测试和生成的连接器 api 模块 xml 文件的一些屏幕截图。基本上,我正在尝试使用 munit-tools:store 将传递给连接器的有效负载(通过转换消息传递)存储在对象存储键中。生成的连接器端点具有如下所示的部分输出

output var

我将存储在这个变量中的值存储到这个 munit-tools:store 键中,如下所示。

stored-image

如果我一次运行一个 munit 测试套件,我就不会遇到这个问题。但是当一次全部运行时,它失败了。

现在查看生成的连接器模块 xml 的屏幕截图。

token

错误可能是由于第 38 行和第 54 行中的 oauth 配置而发生的。我相信在模拟之前对连接器进行了 Oauth 调用,并且它将令牌值存储到显示的令牌管理器中每个测试套件的配置。由于它已经为给定的令牌配置创建并存储了一些值,因此它不允许第二次创建对象存储。但有一点是肯定的,我们无法编辑任何生成的连接器 xml。


这是生成的 xml 和 munit 测试用例在 studio 中的外观。抱歉,我无法在此处粘贴源代码

enter image description here

enter image description here

解决方法

我们的项目中遇到了类似的问题。这是由 Oauth 模块引起的。将 oauth 模块升级到 1.1.15 解决了这个问题:

    <dependency>
        <groupId>org.mule.modules</groupId>
        <artifactId>mule-oauth-module</artifactId>
        <version>1.1.15</version>
        <classifier>mule-plugin</classifier>
    </dependency>