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