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