Hi,

I'm having troubles with DefaultIoFilterChainBuilder.buildFilterChain(IoFilterChain) that appears to be called twice with the same filter chain on incoming connection resulting in the following error trace: java.lang.IllegalArgumentException: Other filter is using the same name 'filter0' at org.apache.mina.common.support.AbstractIoFilterChain.checkAddable(AbstractIoFilterChain.java:398) at org.apache.mina.common.support.AbstractIoFilterChain.addLast(AbstractIoFilterChain.java:270) at org.apache.mina.common.DefaultIoFilterChainBuilder.buildFilterChain(DefaultIoFilterChainBuilder.java:242) at org.apache.mina.transport.socket.nio.SocketAcceptor$Worker.processSessions(SocketAcceptor.java:353) at org.apache.mina.transport.socket.nio.SocketAcceptor$Worker.run(SocketAcceptor.java:273) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
       at java.lang.Thread.run(Thread.java:595)

We are using mina-integration-spring 1.0.0 and here is the relevant parts of our applicationContext.xml:

<bean id="filterChainBuilder" class="org.apache.mina.integration.spring.DefaultIoFilterChainBuilderFactoryBean">
   <property name="filters">
     <list>
       <bean class="org.apache.mina.filter.codec.ProtocolCodecFilter">
         <constructor-arg>
           <bean class="<our filter>"/>
         </constructor-arg>
       </bean>
       <bean class="org.apache.mina.filter.LoggingFilter" />
     </list>
   </property>
 </bean>
<bean id="ioAcceptor" class="org.apache.mina.integration.spring.IoAcceptorFactoryBean">
   <property name="target">
     <bean class="org.apache.mina.transport.socket.nio.SocketAcceptor" />
   </property>
   <property name="bindings">
     <list>
       <bean class="org.apache.mina.integration.spring.Binding">
<property name="address"><bean class="java.net.InetSocketAddress"><constructor-arg value="12398" type="int"/></bean></property>
         <property name="handler" ref="<out handler>" />
         <property name="serviceConfig">
<bean class="org.apache.mina.transport.socket.nio.SocketAcceptorConfig"> <property name="filterChainBuilder" ref="filterChainBuilder" />
             <property name="reuseAddress" value="true" />
           </bean>
         </property>
       </bean>
     </list>
   </property>
 </bean>

I have temporary solved this by implementing a subclass of DefaultIoFilterChainBuilderFactoryBean that returns a subclass of DefaultIoFilterChainBuilder which calls IoFilter.clear() before running DefaultIoFilterChainBuilder.buildFilterChain. This appear to work, but is not entirely satisfactory, since I have a feeling that DefaultIoFilterChainBuilderFactoryBean should work for my situation as well.


--
Niklas Gawell
Software developer
Jadestone Group AB

Reply via email to