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

Reply via email to