You could base64 encode your binary data if you don't want to write your own codec. This will increase the amount of data being sent over the wire but it's easy to do.

Writing a codec that that passes the ByteBuffer straight through when you're in binary mode and uses the TextLineCodec when you're not should be fairly simple to create if you don't want to go down the base64 route.

-Mike

Aidan Gallagher wrote:
Hi everyone,

I am building a client server application using MINA and have a small query.

99% of the communication between the client and the server is text.
Therefore I use the TextLineCodecFactory as the protocol codec.

However I also need to send binary image data from the client to the server
on occasion and that causes an exception.

Aug 23, 2007 4:14:55 PM org.apache.mina.util.SessionLog error

SEVERE: [/89.192.26.238:1102] Exception:
org.apache.mina.filter.codec.ProtocolDecoderException:
java.nio.charset.MalformedInputException: Input length = 1 (Hexdump: empty)

       at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCod
ecFilter.java:163)

       at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived
(AbstractIoFilterChain.java:299)

       at
org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoF
ilterChain.java:53)

       at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageRece
ived(AbstractIoFilterChain.java:648)

       at
org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.j
ava:220)

       at
org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(Exe
cutorFilter.java:264)

       at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.ja
va:885)

       at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:9
07)

       at java.lang.Thread.run(Thread.java:619)

Caused by: java.nio.charset.MalformedInputException: Input length = 1

       at java.nio.charset.CoderResult.throwException(CoderResult.java:260)

       at org.apache.mina.common.ByteBuffer.getString(ByteBuffer.java:952)

       at
org.apache.mina.filter.codec.textline.TextLineDecoder.decodeAuto(TextLineDec
oder.java:178)

       at
org.apache.mina.filter.codec.textline.TextLineDecoder.decode(TextLineDecoder
.java:112)

       at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCod
ecFilter.java:156)

       ... 8 more

Will I have to write my own protocol codec for this case?

Thanks for all your help MINA is a great product

Aidan



Reply via email to