Hello, mina-http is not provided as jar in 2.0.7 but you can find it in sources. It may be available for 2.0.8
Regards, Arnaud. 2013/11/27 <[email protected]> > Hi, > > I am having some server application which uses Http protocol over SSL to > communicate with the clients. So far we had developed our own codecs to > handle the HTTP protocol, but as I wanted to week it as simple as possible, > I decided to refactor it to use the http module > > acceptor.getFilterChain().addLast( "sslFilter", sslFilter ); > acceptor.getFilterChain().addLast( "protocolFilter", new > ProtocolCodecFilter( HttpServerEncoder.class, HttpServerDecoder.class)); > > > After struggling for a while I manage to make the server work for the > simpler case: client request - server answers. > > // --------- CLIENT REQUEST --------- > @Override > public void messageReceived( IoSession session, Object message) throws > Exception { > String sessionInfo = LogUtils.getSessionInfo(session); > > if (message instanceof HttpRequest) { > HttpRequest incomingRequest = (HttpRequest) message; > /* ... */ > } > else if (message instanceof IoBuffer) { > IoBuffer buf = (IoBuffer)message; > CharBuffer charBuffer = decoder.decode(buf.buf()); > String body = charBuffer.toString(); > buf.free(); > } > else if (message instanceof HttpEndOfContent) { > > /* processRequest */ > } > } > > > // --------------- SERVER RESPONSE ------------- > public void sendResponse(IoSession session, HttpStatus > responseCode, String response, boolean isJson, boolean closeSession) throws > CharacterCodingException { > String dt = new SimpleDateFormat("EEE, dd MMM yyyy > HH:mm:ss zzz").format(new Date()); > > Map<String, String> headers = new HashMap<String, > String>(); > headers.put("Cache-Control", "private"); > headers.put("Date", dt); > headers.put("Last-Modified", dt); > if (isJson){ > headers.put("Content-Type", "application/json; > charset=utf-8"); > } else { > headers.put("Content-Type", "application/xml; > charset=utf-8"); > } > if (closeSession) { > headers.put("Connection", "Close"); > } > if (StringUtils.isEmpty(response)){ > headers.put("Content-Length", "0"); > session.write(new > DefaultHttpResponse(HttpVersion.HTTP_1_1, responseCode, headers)); > } else { > byte[] responseBytes = response.getBytes(utf8); > headers.put("Content-Length", > String.valueOf(responseBytes.length)); > session.write(new > DefaultHttpResponse(HttpVersion.HTTP_1_1, responseCode, headers)); > > IoBuffer buf = > IoBuffer.allocate(responseBytes.length); > buf.put(responseBytes); > buf.flip(); > session.write(buf); > buf.free(); > } > session.write(new HttpEndOfContent()); > > if (closeSession){ > session.close(false); > } > } > > > After sending the response, we don't want to close the session because we > need to wait for the client to make a second request. The problem that I > have step into is that, when we make this second request, we get this > exception: > > 2013-11-27 10:04:16,886 ERROR [NioProcessor-2] (DabServerHandler.java:71) > - [127.0.0.1] id(1) - EXCEPTION : java.lang.IllegalArgumentException: No > enum constant org.apache.mina.http.api.HttpMethod.ET (Hexdump: 45 54 20 > 2F 64 61 62 70 2F 31 2E 30 2F 61 64 64 3F 66 6F 72 6D 61 74 3D 6A 73 6F 6E > 26 61 6C 67 6F 72 69 74 68 6D 3D 52 53 41 2D 53 48 41 32 35 36 26 61 70 70 > 69 64 3D 63 6F 6D 2E 6E 6F 6B 69 61 2E 64 61 62 63 2E 6A 6D 65 2E 73 34 30 > 2D 31 26 63 6E 6F 6E 63 65 3D 62 6E 52 6B 4D 44 46 78 64 33 45 33 56 6B 56 > 4E 5A 7A 52 72 59 6C 51 33 4F 58 4A 30 26 69 64 3D 77 2D 31 77 76 36 70 38 > 63 6E 31 6E 37 70 35 34 68 78 74 67 6E 33 72 6A 65 36 71 34 26 6E 6F 6E 63 > 65 3D 4D 76 43 34 52 6C 7A 45 56 63 26 72 65 61 6C 6D 3D 77 69 70 73 6C 2E > 63 6F 6D 26 72 65 66 3D 42 51 49 4B 36 36 51 78 36 4D 5A 6C 56 54 79 75 58 > 50 71 55 75 65 54 78 78 69 73 25 32 35 33 44 26 73 69 67 6E 61 74 75 72 65 > 3D 6E 34 74 5A 4C 67 79 70 68 36 25 32 35 32 42 7A 30 32 61 64 74 47 78 64 > 4C 45 25 32 35 32 46 6F 35 56 33 57 7A 58 46 44 44 37 38 57 65 79 52 61 33 > 25 32 35 32 46 6D 30 56 35 47 25 32 35 32 42 46 57 53 35 38 64 4A 45 6A 35 > 6D 55 66 68 47 47 58 39 78 78 6C 66 45 54 64 56 42 68 56 6D 25 32 35 32 46 > 78 6A 53 50 46 48 73 61 48 68 61 39 33 48 56 54 50 76 68 32 51 47 33 36 58 > 75 69 35 55 69 76 5A 52 58 55 75 67 62 4B 25 32 35 32 42 33 63 50 46 41 6E > 53 69 4C 57 6E 61 70 6A 45 55 52 6A 63 6B 50 30 66 61 45 63 63 45 71 30 58 > 73 44 32 4A 66 34 73 31 47 6E 4B 37 54 35 77 63 6A 61 38 75 59 25 32 35 33 > 44 26 74 69 6D 65 73 74 61 6D 70 3D 31 33 38 35 35 33 39 34 34 39 26 76 65 > 72 73 69 6F 6E 3D 31 2E 35 2E 37 20 48 54 54 50 2F 31 2E 31 0D 0A 48 6F 73 > 74 3A 20 6C 6F 63 61 6C 68 6F 73 74 3A 38 34 34 33 0D 0A 43 6F 6E 6E 65 63 > 74 69 6F 6E 3A 20 4B 65 65 70 2D 41 6C 69 76 65 0D 0A 55 73 65 72 2D 41 67 > 65 6E 74 3A 20 41 70 61 63 68 65 2D 48 74 74 70 43 6C 69 65 6E 74 2F 34 2E > 33 20 28 6A 61 76 61 20 31 2E 35 29 0D 0A 0D 0A) > org.apache.mina.filter.codec.ProtocolDecoderException: > java.lang.IllegalArgumentException: No enum constant > org.apache.mina.http.api.HttpMethod.ET (Hexdump: 45 54 20 2F 64 61 62 70 > 2F 31 2E 30 2F 61 64 64 3F 66 6F 72 6D 61 74 3D 6A 73 6F 6E 26 61 6C 67 6F > 72 69 74 68 6D 3D 52 53 41 2D 53 48 41 32 35 36 26 61 70 70 69 64 3D 63 6F > 6D 2E 6E 6F 6B 69 61 2E 64 61 62 63 2E 6A 6D 65 2E 73 34 30 2D 31 26 63 6E > 6F 6E 63 65 3D 62 6E 52 6B 4D 44 46 78 64 33 45 33 56 6B 56 4E 5A 7A 52 72 > 59 6C 51 33 4F 58 4A 30 26 69 64 3D 77 2D 31 77 76 36 70 38 63 6E 31 6E 37 > 70 35 34 68 78 74 67 6E 33 72 6A 65 36 71 34 26 6E 6F 6E 63 65 3D 4D 76 43 > 34 52 6C 7A 45 56 63 26 72 65 61 6C 6D 3D 77 69 70 73 6C 2E 63 6F 6D 26 72 > 65 66 3D 42 51 49 4B 36 36 51 78 36 4D 5A 6C 56 54 79 75 58 50 71 55 75 65 > 54 78 78 69 73 25 32 35 33 44 26 73 69 67 6E 61 74 75 72 65 3D 6E 34 74 5A > 4C 67 79 70 68 36 25 32 35 32 42 7A 30 32 61 64 74 47 78 64 4C 45 25 32 35 > 32 46 6F 35 56 33 57 7A 58 46 44 44 37 38 57 65 79 52 61 33 25 32 35 32 46 > 6D 30 56 35 47 25 32 35 32 42 46 57 53 35 38 64 4A 45 6A 35 6D 55 66 68 47 > 47 58 39 78 78 6C 66 45 54 64 56 42 68 56 6D 25 32 35 32 46 78 6A 53 50 46 > 48 73 61 48 68 61 39 33 48 56 54 50 76 68 32 51 47 33 36 58 75 69 35 55 69 > 76 5A 52 58 55 75 67 62 4B 25 32 35 32 42 33 63 50 46 41 6E 53 69 4C 57 6E > 61 70 6A 45 55 52 6A 63 6B 50 30 66 61 45 63 63 45 71 30 58 73 44 32 4A 66 > 34 73 31 47 6E 4B 37 54 35 77 63 6A 61 38 75 59 25 32 35 33 44 26 74 69 6D > 65 73 74 61 6D 70 3D 31 33 38 35 35 33 39 34 34 39 26 76 65 72 73 69 6F 6E > 3D 31 2E 35 2E 37 20 48 54 54 50 2F 31 2E 31 0D 0A 48 6F 73 74 3A 20 6C 6F > 63 61 6C 68 6F 73 74 3A 38 34 34 33 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A > 20 4B 65 65 70 2D 41 6C 69 76 65 0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 > 41 70 61 63 68 65 2D 48 74 74 70 43 6C 69 65 6E 74 2F 34 2E 33 20 28 6A 61 > 76 61 20 31 2E 35 29 0D 0A 0D 0A) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:242) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) > at > org.apache.mina.filter.ssl.SslHandler.flushScheduledEvents(SslHandler.java:322) > at > org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:497) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) > at > org.apache.mina.filter.logging.LoggingFilter.messageReceived(LoggingFilter.java:208) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) > at > org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124) > at > org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:722) > Caused by: java.lang.IllegalArgumentException: No enum constant > org.apache.mina.http.api.HttpMethod.ET > at java.lang.Enum.valueOf(Enum.java:236) > at org.apache.mina.http.api.HttpMethod.valueOf(HttpMethod.java:27) > at > org.apache.mina.http.HttpServerDecoder.parseHttpRequestHead(HttpServerDecoder.java:184) > at > org.apache.mina.http.HttpServerDecoder.decode(HttpServerDecoder.java:91) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:232) > ... 24 more > > > > I don't think it is a problem of the client because we are using > org.apache.http.client.methods.HttpGet; > > HttpGet httpget = new HttpGet(address); > HttpResponse response = httpclient.execute(httpget); > > > Any idea what is going on? > > Thanks, > -Enrique
