2014-12-24 3 views
0

Я использую интеграцию 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, хотя он имеет один в предыдущих версиях. Как я могу настроить такой маршрутизатор?

+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

ответ

0

Дом был переименован в channelMappingseveral years ago (в 2.1); Я открыл JIRA Issue, чтобы исправить документацию.

Спасибо, что указали это.

1

Я думаю, что вам не нужны последние определения каналов. Согласно документации, вам нужно всего лишь:

<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:payload-type-router input-channel="routingChannel"> 
    <int:mapping type="java.lang.String" channel="stringChannel" /> 
    <int:mapping type="java.lang.Integer" channel="integerChannel" /> 
</int:payload-type-router> 
+0

но все же, что, если я хочу протестировать его из класса java с главной функцией? –

Смежные вопросы

 Смежные вопросы