Я использую интеграцию Spring 4.0, и я попытался создать объект payloadTypeRouter с двумя каналами сообщений - один для полезных данных String и один для полезных нагрузок Integer. Я пытаюсь сделать это с помощью следующего кода Java:Bean property 'channelIdentifierMap' не доступен для записи или имеет недопустимый метод setter
package MessageExamples;
import org.springframework.messaging.Message;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.router.PayloadTypeRouter;
public class Test {
public static void main(String[] args) {
QueueChannel q_channel1=new QueueChannel();
QueueChannel q_channel2=new QueueChannel();
ApplicationContext ctx= new ClassPathXmlApplicationContext("SpringIntegration.xml");
PayloadTypeRouter r= (PayloadTypeRouter) ctx.getBean("payloadTypeRouter");
}}
со следующей конфигурацией:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
<bean id="payloadTypeRouter"
class="org.springframework.integration.router.PayloadTypeRouter">
<property name="channelIdentifierMap">
<map>
<entry key="java.lang.String" value-ref="stringChannel"/>
<entry key="java.lang.Integer" value-ref="integerChannel"/>
</map>
</property>
</bean>
<int:channel id="stringChannel"/>
<int:channel id="integerChannel"/>
</beans>
Когда я пытаюсь запустить его, я получаю следующее сообщение об ошибке:
Исключение в потоке «main» org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «payloadTypeRouter», определенным в ресурсе пути к путу [SpringIntegration.xml]: значения свойств ошибки; Вложенное исключение - org.springframework.beans.NotWritablePropertyException: Недопустимое свойство 'channelIdentifierMap' класса bean [org.springframework.integration.router.PayloadTypeRouter]: Свойство bean 'channelIdentifierMap' не доступно для записи или имеет неверный метод setter.
Я заметил, что AbstractMessageRouter не содержит набор карт в Spring Integration версии 4.0, хотя он имеет один в предыдущих версиях. Как я могу настроить такой маршрутизатор?
Хмм, документы для Spring Integration 4.0 все еще говорят, что используют свойство channelIdentintifierMap', хотя его больше нет. Похож на ошибку в документах для меня: http://docs.spring.io/spring-integration/docs/4.0.6.RELEASE/reference/html/messaging-routing-chapter.html#router-implementations-payloadtyperouter – skaffman