// Path: src/main/java/com/sulaco/fuse/akka/actor/FuseEndpointActor.java
// public abstract class FuseEndpointActor extends FuseBaseActor {
//     
//     @Autowired protected MetricsRegistry metrics;
//     
//     public FuseEndpointActor() {
//         super();
//     }
// 
//     // TODO: refactor metrics
//     //            meter = metrics.getRegistry().timer(getClass().getName());
// 
//     @Override
//     public void onReceive(Object message) throws Exception {
//         try {
//             if (message instanceof FuseRequestMessage) {
//                 onRequest((FuseRequestMessage) message);
//                 //proto.error((FuseRequestMessage) message);
//             }
//             else {
//                 super.onReceive(message);
//             }
//         }
//         catch (Exception ex) {
//             log.error("Error handling request !", ex);
//             unhandled(message);
//         }
//         finally {
//             // TODO: context flush
//         }
//     }
//     
//     protected void onRequest(final FuseRequestMessage request) {
//         
//         RouteHandler rhandler = request.getHandler();
//         
//         Optional<String> method = rhandler.getMethodName();
//         
//         if (method.isPresent()) {
//             // Invoke configured method instead of default 'onReceive'. Method needs to have correct
//             // signature, otherwise, fallback to 'onReceive' will occur.
//             //
//             Optional<Method> target = lookupMethod(this, method.get());
//             if (target.isPresent()) {
//                 try {
//                     target.get()
//                           .invoke(this, request);
//                 }
//                 catch (Exception ex) {
//                     log.warn("[fuse] Invocation failure. x_x", ex);
//                 }
//             }       
//         }
//         else {
//             log.warn("[fuse] No handling method specified. Override onReceive. x_x");
//         }
//     }
// 
// 
// 
//     @Override
//     public void unhandled(Object message) {
//         super.unhandled(message);
//         if (message instanceof FuseRequestMessage) {
//             proto.error((FuseRequestMessage) message);
//         }
//     }
// 
//     public void setProto(WireProtocol proto) {
//         this.proto = proto;
//     }
// 
//     protected static final Logger log = LoggerFactory.getLogger(FuseEndpointActor.class);
// }
// 
// Path: src/main/java/com/sulaco/fuse/akka/message/FuseRequestMessage.java
// public interface FuseRequestMessage extends Route {
// 
//     long getId();
// 
//     HttpRequest getRequest();
// 
//     String getRequestBody();
// 
//     ChannelHandlerContext getChannelContext();
// 
//     void flush();
// 
//     boolean flushed();
// 
//     public <T> Optional<T> getParam(String name, Class<T> clazz);
// 
// }


import com.sulaco.fuse.akka.actor.FuseEndpointActor;
import com.sulaco.fuse.akka.message.FuseRequestMessage;
import com.sulaco.fuse.config.annotation.FuseEndpoint;
package com.sulaco.fuse.example.endpoint;


@FuseEndpoint(path = "/echo/<param1>")
public class EchoParam extends FuseEndpointActor {

    @Override
// Path: src/main/java/com/sulaco/fuse/akka/actor/FuseEndpointActor.java
// public abstract class FuseEndpointActor extends FuseBaseActor {
//     
//     @Autowired protected MetricsRegistry metrics;
//     
//     public FuseEndpointActor() {
//         super();
//     }
// 
//     // TODO: refactor metrics
//     //            meter = metrics.getRegistry().timer(getClass().getName());
// 
//     @Override
//     public void onReceive(Object message) throws Exception {
//         try {
//             if (message instanceof FuseRequestMessage) {
//                 onRequest((FuseRequestMessage) message);
//                 //proto.error((FuseRequestMessage) message);
//             }
//             else {
//                 super.onReceive(message);
//             }
//         }
//         catch (Exception ex) {
//             log.error("Error handling request !", ex);
//             unhandled(message);
//         }
//         finally {
//             // TODO: context flush
//         }
//     }
//     
//     protected void onRequest(final FuseRequestMessage request) {
//         
//         RouteHandler rhandler = request.getHandler();
//         
//         Optional<String> method = rhandler.getMethodName();
//         
//         if (method.isPresent()) {
//             // Invoke configured method instead of default 'onReceive'. Method needs to have correct
//             // signature, otherwise, fallback to 'onReceive' will occur.
//             //
//             Optional<Method> target = lookupMethod(this, method.get());
//             if (target.isPresent()) {
//                 try {
//                     target.get()
//                           .invoke(this, request);
//                 }
//                 catch (Exception ex) {
//                     log.warn("[fuse] Invocation failure. x_x", ex);
//                 }
//             }       
//         }
//         else {
//             log.warn("[fuse] No handling method specified. Override onReceive. x_x");
//         }
//     }
// 
// 
// 
//     @Override
//     public void unhandled(Object message) {
//         super.unhandled(message);
//         if (message instanceof FuseRequestMessage) {
//             proto.error((FuseRequestMessage) message);
//         }
//     }
// 
//     public void setProto(WireProtocol proto) {
//         this.proto = proto;
//     }
// 
//     protected static final Logger log = LoggerFactory.getLogger(FuseEndpointActor.class);
// }
// 
// Path: src/main/java/com/sulaco/fuse/akka/message/FuseRequestMessage.java
// public interface FuseRequestMessage extends Route {
// 
//     long getId();
// 
//     HttpRequest getRequest();
// 
//     String getRequestBody();
// 
//     ChannelHandlerContext getChannelContext();
// 
//     void flush();
// 
//     boolean flushed();
// 
//     public <T> Optional<T> getParam(String name, Class<T> clazz);
// 
// }


// Path: examples/annotations/src/main/java/com/sulaco/fuse/example/endpoint/EchoParam.java
import com.sulaco.fuse.akka.actor.FuseEndpointActor;
import com.sulaco.fuse.akka.message.FuseRequestMessage;
import com.sulaco.fuse.config.annotation.FuseEndpoint;

package com.sulaco.fuse.example.endpoint;


@FuseEndpoint(path = "/echo/<param1>")
public class EchoParam extends FuseEndpointActor {

    @Override
    protected void onRequest(FuseRequestMessage request) {