RabbitTemplate XSD 具有不匹配的属性“return-callback”

问题描述 投票:0回答:1

我不确定这是一个错误,或者(更有可能)是我对 spring/XSD 如何工作的误解。

我有这个 xml 定义的rabbitTemplate :

    <rabbit:template    id="rabbitTemplate" 
                        connection-factory="rabbitConnectionFactory"  
                        mandatory="true" 
                        channel-transacted="true" 
                        message-converter="simpleMessageConverter"
                        return-callback="rabbitFailedRoutingReturnCallback"/>

不接受最新的属性“return-callback”:

[创建名称为“rabbitTemplate”的 bean 时出错:属性无效 bean 类的“returnCallback” [org.springframework.amqp.rabbit.core.RabbitTemplate]:Bean 属性 “returnCallback”不可写或具有无效的 setter 方法。做过 你的意思是“returnsCallback”?]

按照建议替换为“returns-callback”,尽管它存在于 TemplateParser 中,但不起作用,因为该属性不存在于 最新的 spring-rabbit xsd 中。并且 RabbitTemplate 看起来没有 returnCallback 的设置器(没有 's')。

切换到标准 bean 定义效果很好:

    <bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
        <property name="connectionFactory" ref="rabbitConnectionFactory" />
        <property name="mandatory"  value="true" />
        <property name="channelTransacted"  value="true" />
        <property name="messageConverter"       ref="simpleMessageConverter" />
        <property name="returnsCallback"        ref="rabbitFailedRoutingReturnCallback" />
    </bean>     

另外,查看spring-rabbit template的源代码源代码,看起来不错。所以要么它还没有发布,要么我的发布版本的 错误的 url

所以,任何人都可以帮我找出这是一个错误还是我的误解?

(由于我仍然对 spring xml 定义和命名空间感到不安,并且通常心不在焉,所以我宁愿在提出问题之前在这里询问)

spring xsd spring-amqp spring-rabbit
1个回答
0
投票

StackOverflow 上有很多类似的问题。答案是:使用支持 Spring 的 IDE,例如IntelliJ IDEA 或 Spring 工具套件。重点是让您的 IDE 从类路径(本质上是从

spring-rabbit.jar
)解析这些 XSD 文件。这样,它将向您显示您使用的依赖项的版本的实际属性。

returns-callback
正确使用:

    NamespaceUtils.setReferenceIfAttributeDefined(builder, element, RETURN_CALLBACK_ATTRIBUTE);
    NamespaceUtils.setReferenceIfAttributeDefined(builder, element, RETURNS_CALLBACK_ATTRIBUTE);

第一行是一个错误,因为已弃用的

return-callback
必须映射到
RabbitTemplate.setReturnsCallback()

我认为是时候完全删除

return-callback
了,因为四年前它被
returns-callback
取代了。

© www.soinside.com 2019 - 2024. All rights reserved.