在消息过滤器下包装idempotent-message-filter,导致Mule中出现异常

时间:2014-09-22 17:29:28

标签: mule mule-studio

我陷入了一个非常小的问题 我想在消息过滤器下包装 idempotent-message-filter 这是我的流程: -

  <idempotent-message-filter name="Validation" idExpression="#[message:payload]" doc:name="Idempotent Message">
            <simple-text-file-store directory="./idempotent"  /> 
       </idempotent-message-filter>

    <flow name="tttFlow1" doc:name="tttFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="path" doc:name="HTTP"/>

       <message-filter  onUnaccepted="ValidationFailFlow" doc:name="filter to validate xml" throwOnUnaccepted="true" >
        <filter ref="Validation"/>
     </message-filter>

       <logger message="Passed" level="INFO" doc:name="Logger"/>
        <set-payload value="Passed" doc:name="Set Payload"/>

      <catch-exception-strategy doc:name="Catch Exception Strategy">
            <set-payload value="EXCEPTION!" doc:name="Set Payload" />
        </catch-exception-strategy>

    </flow>

获得以下例外: -

ERROR 2014-09-22 22:50:40,367 [main] org.mule.module.launcher.application.DefaultMuleApplication: null
java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:264)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:448)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:488)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1437)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1396)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:126)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:154)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.mule.config.spring.SpringRegistry.doInitialise(SpringRegistry.java:86)
    at org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:105)
    at org.mule.config.spring.SpringXmlConfigurationBuilder.createSpringRegistry(SpringXmlConfigurationBuilder.java:135)
    at org.mule.config.spring.SpringXmlConfigurationBuilder.doConfigure(SpringXmlConfigurationBuilder.java:90)
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:43)
    at org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69)
    at org.mule.config.builders.AutoConfigurationBuilder.autoConfigure(AutoConfigurationBuilder.java:101)
    at org.mule.config.builders.AutoConfigurationBuilder.doConfigure(AutoConfigurationBuilder.java:52)
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:43)
    at org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69)
    at org.mule.context.DefaultMuleContextFactory$1.configure(DefaultMuleContextFactory.java:84)
    at org.mule.context.DefaultMuleContextFactory.doCreateMuleContext(DefaultMuleContextFactory.java:217)
    at org.mule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:76)
    at org.mule.module.launcher.application.DefaultMuleApplication.init(DefaultMuleApplication.java:174)
    at org.mule.module.launcher.artifact.ArtifactWrapper$2.execute(ArtifactWrapper.java:62)
    at org.mule.module.launcher.artifact.ArtifactWrapper.executeWithinArtifactClassLoader(ArtifactWrapper.java:129)
    at org.mule.module.launcher.artifact.ArtifactWrapper.init(ArtifactWrapper.java:57)
    at org.mule.module.launcher.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:25)
    at org.mule.module.launcher.DefaultArchiveDeployer.guardedDeploy(DefaultArchiveDeployer.java:274)
    at org.mule.module.launcher.DefaultArchiveDeployer.deployArtifact(DefaultArchiveDeployer.java:294)
    at org.mule.module.launcher.DefaultArchiveDeployer.deployExplodedApp(DefaultArchiveDeployer.java:261)
    at org.mule.module.launcher.DefaultArchiveDeployer.deployExplodedArtifact(DefaultArchiveDeployer.java:110)
    at org.mule.module.launcher.DeploymentDirectoryWatcher.deployExplodedApps(DeploymentDirectoryWatcher.java:287)
    at org.mule.module.launcher.DeploymentDirectoryWatcher.start(DeploymentDirectoryWatcher.java:148)
    at org.mule.tooling.server.application.ApplicationDeployer.main(ApplicationDeployer.java:130)
INFO  2014-09-22 22:50:40,371 [main] org.mule.module.launcher.application.DefaultMuleApplication: App 'Idempotent_Message_Filter' never started, nothing to dispose of
ERROR 2014-09-22 22:50:40,397 [main] org.mule.module.launcher.DefaultArchiveDeployer: 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Failed to deploy artifact 'Idempotent_Message_Filter',   +
+ see below                                                +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
org.mule.module.launcher.DeploymentInitException: IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.mule.module.launcher.application.DefaultMuleApplication.init(DefaultMuleApplication.java:181)
    at org.mule.module.launcher.artifact.ArtifactWrapper$2.execute(ArtifactWrapper.java:62)
    at org.mule.module.launcher.artifact.ArtifactWrapper.executeWithinArtifactClassLoader(ArtifactWrapper.java:129)
    at org.mule.module.launcher.artifact.ArtifactWrapper.init(ArtifactWrapper.java:57)
    at org.mule.module.launcher.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:25)
    at org.mule.module.launcher.DefaultArchiveDeployer.guardedDeploy(DefaultArchiveDeployer.java:274)
    at org.mule.module.launcher.DefaultArchiveDeployer.deployArtifact(DefaultArchiveDeployer.java:294)
    at org.mule.module.launcher.DefaultArchiveDeployer.deployExplodedApp(DefaultArchiveDeployer.java:261)
    at org.mule.module.launcher.DefaultArchiveDeployer.deployExplodedArtifact(DefaultArchiveDeployer.java:110)
    at org.mule.module.launcher.DeploymentDirectoryWatcher.deployExplodedApps(DeploymentDirectoryWatcher.java:287)
    at org.mule.module.launcher.DeploymentDirectoryWatcher.start(DeploymentDirectoryWatcher.java:148)
    at org.mule.tooling.server.application.ApplicationDeployer.main(ApplicationDeployer.java:130)
Caused by: org.mule.api.config.ConfigurationException: Error creating bean with name 'tttFlow1': Cannot create inner bean '(inner bean)' of type [org.mule.routing.MessageFilter] while setting bean property 'messageProcessors' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mule.routing.IdempotentMessageFilter' to required type 'org.mule.api.routing.filter.Filter' for property 'filter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found (org.mule.api.lifecycle.InitialisationException) (org.mule.api.config.ConfigurationException)
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:49)
    at org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69)
    at org.mule.context.DefaultMuleContextFactory$1.configure(DefaultMuleContextFactory.java:84)
    at org.mule.context.DefaultMuleContextFactory.doCreateMuleContext(DefaultMuleContextFactory.java:217)
    at org.mule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:76)
    at org.mule.module.launcher.application.DefaultMuleApplication.init(DefaultMuleApplication.java:174)
    ... 11 more
Caused by: org.mule.api.config.ConfigurationException: Error creating bean with name 'tttFlow1': Cannot create inner bean '(inner bean)' of type [org.mule.routing.MessageFilter] while setting bean property 'messageProcessors' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mule.routing.IdempotentMessageFilter' to required type 'org.mule.api.routing.filter.Filter' for property 'filter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found (org.mule.api.lifecycle.InitialisationException)
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:49)
    at org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69)
    at org.mule.config.builders.AutoConfigurationBuilder.autoConfigure(AutoConfigurationBuilder.java:101)
    at org.mule.config.builders.AutoConfigurationBuilder.doConfigure(AutoConfigurationBuilder.java:52)
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:43)
    ... 16 more
Caused by: org.mule.api.lifecycle.InitialisationException: Error creating bean with name 'tttFlow1': Cannot create inner bean '(inner bean)' of type [org.mule.routing.MessageFilter] while setting bean property 'messageProcessors' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mule.routing.IdempotentMessageFilter' to required type 'org.mule.api.routing.filter.Filter' for property 'filter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:113)
    at org.mule.config.spring.SpringXmlConfigurationBuilder.createSpringRegistry(SpringXmlConfigurationBuilder.java:135)
    at org.mule.config.spring.SpringXmlConfigurationBuilder.doConfigure(SpringXmlConfigurationBuilder.java:90)
    at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:43)
    ... 20 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tttFlow1': Cannot create inner bean '(inner bean)' of type [org.mule.routing.MessageFilter] while setting bean property 'messageProcessors' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mule.routing.IdempotentMessageFilter' to required type 'org.mule.api.routing.filter.Filter' for property 'filter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:282)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:126)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:154)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.mule.config.spring.SpringRegistry.doInitialise(SpringRegistry.java:86)
    at org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:105)
    ... 23 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mule.routing.IdempotentMessageFilter' to required type 'org.mule.api.routing.filter.Filter' for property 'filter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:532)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271)
    ... 39 more
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.mule.routing.IdempotentMessageFilter' to required type 'org.mule.api.routing.filter.Filter' for property 'filter'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:463)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:488)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1437)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1396)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    ... 41 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.mule.routing.IdempotentMessageFilter] to required type [org.mule.api.routing.filter.Filter] for property 'filter': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:264)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:448)
    ... 47 more
INFO  2014-09-22 22:50:40,402 [main] org.mule.module.launcher.DeploymentDirectoryWatcher: 

所以,我的问题很简单: -

  • 这是正确的做法吗?
  • 我可以将 Idempotent-filter 打包下 邮件过滤器? 请建议......

2 个答案:

答案 0 :(得分:1)

我认为idempotent-message-filter实际上是一个拦截消息处理器而不是过滤器(实现org.mule.api.routing.filter.Filter.class),所以它不能在消息过滤器中使用。

但是,看起来您正在将其用于throwOnUnaccepted功能。 idempotent-message-filter本身具有此属性,因此不需要:

<idempotent-message-filter name="Validation" idExpression="#[message:payload]" throwOnUnaccepted="true" />

答案 1 :(得分:0)

感谢Ryan,所以我的工作解决方案是: -

<idempotent-message-filter idExpression="#[message:payload]" doc:name="Idempotent Message"  throwOnUnaccepted="true"  onUnaccepted="ValidationFailFlow">
   <simple-text-file-store directory="./idempotent"  /> <!-- In memory files -->
</idempotent-message-filter>