...
Option | Default Value | Description |
---|---|---|
codec | null | As of 1.3 or later you can refer to a named ProtocolCodecFactory instance in your Registry such as your Spring ApplicationContext which is then used for the marshalling |
textline | false | Only used for TCP. If no codec is specified then you can use this flag in 1.3 or later to indicate a text line based codec; if not specified or the value is false then Object Serialization is assumed over TCP. |
textlineDelimiter | DEFAULT | Camel 1.5.1/2.0 Only used for TCP and if textline=true. Sets the text line delimiter to use. Possible values are: |
sync | false/true | As of 1.3 or later you can configure the exchange pattern to be either InOnly (default) or InOut. Setting sync=true means a synchronous exchange (InOut), where the client can read the response from MINA (The exchange out message). The default value has changed in Camel 1.5 to true. In older releases the default value is false. |
lazySessionCreation | false | As of 1.3 or later session can be lazy created to avoid exceptions if the remote server is not up and running when the Camel producer is started. |
timeout | 30000 | As of 1.3 or later you can configure the timeout while waiting for a response from a remote server. The timeout unit is in millis, so 60000 is 60 seconds. The timeout is only used for MinaProducer. |
encoding | JVM Default | As of 1.3 or later you can configure the encoding (is a charset name) to use for the TCP textline codec and the UDP protocol. If not provided Camel will use the JVM default Charset. |
transferExchange | false | Only used for TCP. As of 1.3 or later you can transfer the exchange over the wire instead of just the body. The following fields is transferred: in body, out body, fault body, in headers, out headers, fault headers, exchange properties, exchange exception. This requires that the objects are Serializable. Camel will exclude any non serializable objects and log it at WARN level. |
minaLogger | false | As of 1.3 or later you can enable Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output. |
filters | null | As of 2.0 or later you can set a list of Mina IoFilters to register. The type must be |
...
Code Block | ||||
---|---|---|---|---|
| ||||
from("mina:tcp://localhost:8080?sync=true&textline=true").process(new Processor() { public void process(Exchange exchange) throws Exception { String body = exchange.getIn().getBody(String.class); exchange.getOut().setBody("Bye " + body); exchange.getOut().setHeader(MinaConsumer.HEADER_CLOSE_SESSION_WHEN_COMPLETE, true); } }); |
Configuring Mina filters
Avaiable as of Camel 2.0
Filters permits you to use some Mina Filters, such as SslFilter. You can also implement some customized filters. Please note that codec
and logger
are also Mina IoFitler, and the filters you may define are appended at the end of the FilterChain, then after codec and logger.
For instance, the example below will send a keep-alive message after 10 seconds of inactivity:
Code Block | ||||
---|---|---|---|---|
| ||||
public class KeepAliveFilter extends IoFilterAdapter {
@Override
public void sessionCreated(NextFilter nextFilter, IoSession session)
throws Exception {
session.setIdleTime(IdleStatus.BOTH_IDLE, 10);
nextFilter.sessionCreated(session);
}
@Override
public void sessionIdle(NextFilter nextFilter, IoSession session,
IdleStatus status) throws Exception {
session.write("NOOP"); // NOOP is a FTP command for keep alive
nextFilter.sessionIdle(session, status);
}
}
|
As Camel Mina may ues a request-reply scheme, the endpoint as a client would like to drop some message, such as greeting when the connection is established. For example, when you connect to an FTP server, you will get a 220
message with a greeting (220 Welcome to Pure-FTPd
). If you don't drop the message, you request-reply scheme will be broken.
Code Block | ||||
---|---|---|---|---|
| ||||
public class DropGreetingFilter extends IoFilterAdapter {
@Override
public void messageReceived(NextFilter nextFilter, IoSession session,
Object message) throws Exception {
if (message instanceof String) {
String ftpMessage = (String) message;
// "220" is given as greeting. "200 Zzz" is given as a response to "NOOP" (keep alive)
if (ftpMessage.startsWith("220") || or ftpMessage.startsWith("200 Zzz")) {
// Dropping greeting
return;
}
}
nextFilter.messageReceived(session, message);
}
}
|
Then, you can configure your endpoint. Using Spring DSL:
Code Block | ||||
---|---|---|---|---|
| ||||
<bean id="myMinaFactory" class="org.apache.camel.component.mina.MinaComponent"/>
<bean id="myMinaEndpoint"
factory-bean="myMinaFactory"
factory-method="createEndpoint">
<constructor-arg index="0" ref="myMinaConfig"/>
</bean>
<bean id="myMinaConfig" class="org.apache.camel.component.mina.MinaConfiguration">
<property name="protocol" value="tcp" />
<property name="host" value="localhost" />
<property name="port" value="2121" />
<property name="sync" value="true" />
<property name="minaLogger" value="true" />
<property name="filters" ref="listFilters"/>
</bean>
<bean id="listFilters" class="java.util.ArrayList" >
<constructor-arg>
<list value-type="org.apache.mina.common.IoFilter">
<bean class="com.example.KeepAliveFilter"/>
<bean class="com.example.DropGreetingFilter"/>
</list>
</constructor-arg>
</bean>
|
Include Page | ||||
---|---|---|---|---|
|