// Path: src/main/java/org/bigtesting/fixd/marshalling/Unmarshaller.java
// public interface Unmarshaller {
// 
//     <T> T unmarshal(InputStream in, Class<T> type);
// }
// 
// Path: src/main/java/org/bigtesting/fixd/marshalling/UnmarshallerProvider.java
// public interface UnmarshallerProvider {
// 
//     /**
//      * 
//      * Returns the Unmarshaller for the given content-type,
//      * or null if there is no Unmarshaller for the given
//      * content-type.
//      * 
//      * @param contentType
//      * @return the Unmarshaller for the given content-type, or
//      *         null if there is no Unmarshaller for the given
//      *         content-type
//      */
//     Unmarshaller getUnmarshaller(String contentType);
// }
// 
// Path: src/main/java/org/bigtesting/fixd/request/HttpRequest.java
// public interface HttpRequest {
// 
//     String getPath();
//     
//     String getUndecodedPath();
//     
//     Set<String> getRequestParameterNames();
//     
//     String getRequestParameter(String name);
//     
//     String getPathParameter(String name);
//     
//     List<String> getHeaderNames();
//     
//     String getHeaderValue(String name);
//     
//     String getBody();
//     
//     InputStream getBodyAsStream() throws IOException;
//     
//     <T> T getBody(Class<T> type);
//     
//     long getContentLength();
//     
//     String getContentType();
//     
//     String getMethod();
//     
//     long getTime();
//     
//     String getQuery();
//     
//     int getMajor();
//     
//     int getMinor();
//     
//     String getTarget();
//     
//     /**
//      * @return a session, if it exists, or null if it does not
//      */
//     Session getSession();
//     
//     Route getRoute();
// }
// 
// Path: src/main/java/org/bigtesting/fixd/session/Session.java
// public class Session {
// 
//     private final String sessionId;
//     
//     private final Map<String, Object> values = new HashMap<String, Object>();
//     
//     private boolean valid = true;
//     
//     public Session() {
//         
//         this.sessionId = UUID.randomUUID().toString();
//     }
//     
//     public String getSessionId() {
//         
//         return sessionId;
//     }
//     
//     public Object get(String key) {
//         
//         return values.get(key);
//     }
//     
//     public void set(String key, Object value) {
//         
//         values.put(key, value);
//     }
//     
//     public Set<String> getAttributeNames() {
//         
//         return values.keySet();
//     }
//     
//     public boolean isValid() {
//         
//         return valid;
//     }
//     
//     public void invalidate() {
//         
//         this.valid = false;
//     }
// }
// 
// Path: src/main/java/org/bigtesting/fixd/util/RequestUtils.java
// public class RequestUtils {
// 
//     public static byte[] readBody(InputStream in) {
//         
//         ByteArrayOutputStream out = new ByteArrayOutputStream();
//         try {
//             
//             byte[] buffer = new byte[1024];
//             int len = 0;
//             while ((len = in.read(buffer)) != -1) {
//                 out.write(buffer, 0, len);
//             }
//             
//         } catch (IOException e) {
//             throw new RuntimeException("error getting body", e);
//         } finally {
//             if (in != null) try {in.close();} catch (IOException e2) {}
//         }
//         
//         return out.toByteArray();
//     }
//     
//     public static String getUndecodedPath(Request request) {
//         
//         String path = request.getTarget();
//         int queryIndex = path.indexOf('?');
//         if (queryIndex != -1) {
//             path = path.substring(0, queryIndex);
//         }
//         return path;
//     }
// }


import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;
import org.bigtesting.fixd.marshalling.Unmarshaller;
import org.bigtesting.fixd.marshalling.UnmarshallerProvider;
import org.bigtesting.fixd.request.HttpRequest;
import org.bigtesting.fixd.session.Session;
import org.bigtesting.fixd.util.RequestUtils;
import org.bigtesting.routd.Route;
import org.simpleframework.http.Request;
        
        return getRoute().getNamedParameter(name, getPath());
    }
    
    public List<String> getHeaderNames() {
        
        return request.getNames();
    }
    
    public String getHeaderValue(String name) {
        
        return request.getValue(name);
    }
    
    public String getBody() {
        
        try {
            return new String(RequestUtils.readBody(getBodyAsStream()));
        } catch (IOException e) {
            throw new RuntimeException("error getting body", e);
        }
    }
    
    public InputStream getBodyAsStream() throws IOException {
        
        return request.getInputStream();
    }
    
    public <T> T getBody(Class<T> type) {
        
// Path: src/main/java/org/bigtesting/fixd/marshalling/Unmarshaller.java
// public interface Unmarshaller {
// 
//     <T> T unmarshal(InputStream in, Class<T> type);
// }
// 
// Path: src/main/java/org/bigtesting/fixd/marshalling/UnmarshallerProvider.java
// public interface UnmarshallerProvider {
// 
//     /**
//      * 
//      * Returns the Unmarshaller for the given content-type,
//      * or null if there is no Unmarshaller for the given
//      * content-type.
//      * 
//      * @param contentType
//      * @return the Unmarshaller for the given content-type, or
//      *         null if there is no Unmarshaller for the given
//      *         content-type
//      */
//     Unmarshaller getUnmarshaller(String contentType);
// }
// 
// Path: src/main/java/org/bigtesting/fixd/request/HttpRequest.java
// public interface HttpRequest {
// 
//     String getPath();
//     
//     String getUndecodedPath();
//     
//     Set<String> getRequestParameterNames();
//     
//     String getRequestParameter(String name);
//     
//     String getPathParameter(String name);
//     
//     List<String> getHeaderNames();
//     
//     String getHeaderValue(String name);
//     
//     String getBody();
//     
//     InputStream getBodyAsStream() throws IOException;
//     
//     <T> T getBody(Class<T> type);
//     
//     long getContentLength();
//     
//     String getContentType();
//     
//     String getMethod();
//     
//     long getTime();
//     
//     String getQuery();
//     
//     int getMajor();
//     
//     int getMinor();
//     
//     String getTarget();
//     
//     /**
//      * @return a session, if it exists, or null if it does not
//      */
//     Session getSession();
//     
//     Route getRoute();
// }
// 
// Path: src/main/java/org/bigtesting/fixd/session/Session.java
// public class Session {
// 
//     private final String sessionId;
//     
//     private final Map<String, Object> values = new HashMap<String, Object>();
//     
//     private boolean valid = true;
//     
//     public Session() {
//         
//         this.sessionId = UUID.randomUUID().toString();
//     }
//     
//     public String getSessionId() {
//         
//         return sessionId;
//     }
//     
//     public Object get(String key) {
//         
//         return values.get(key);
//     }
//     
//     public void set(String key, Object value) {
//         
//         values.put(key, value);
//     }
//     
//     public Set<String> getAttributeNames() {
//         
//         return values.keySet();
//     }
//     
//     public boolean isValid() {
//         
//         return valid;
//     }
//     
//     public void invalidate() {
//         
//         this.valid = false;
//     }
// }
// 
// Path: src/main/java/org/bigtesting/fixd/util/RequestUtils.java
// public class RequestUtils {
// 
//     public static byte[] readBody(InputStream in) {
//         
//         ByteArrayOutputStream out = new ByteArrayOutputStream();
//         try {
//             
//             byte[] buffer = new byte[1024];
//             int len = 0;
//             while ((len = in.read(buffer)) != -1) {
//                 out.write(buffer, 0, len);
//             }
//             
//         } catch (IOException e) {
//             throw new RuntimeException("error getting body", e);
//         } finally {
//             if (in != null) try {in.close();} catch (IOException e2) {}
//         }
//         
//         return out.toByteArray();
//     }
//     
//     public static String getUndecodedPath(Request request) {
//         
//         String path = request.getTarget();
//         int queryIndex = path.indexOf('?');
//         if (queryIndex != -1) {
//             path = path.substring(0, queryIndex);
//         }
//         return path;
//     }
// }


// Path: src/main/java/org/bigtesting/fixd/request/impl/SimpleHttpRequest.java
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;
import org.bigtesting.fixd.marshalling.Unmarshaller;
import org.bigtesting.fixd.marshalling.UnmarshallerProvider;
import org.bigtesting.fixd.request.HttpRequest;
import org.bigtesting.fixd.session.Session;
import org.bigtesting.fixd.util.RequestUtils;
import org.bigtesting.routd.Route;
import org.simpleframework.http.Request;

        
        return getRoute().getNamedParameter(name, getPath());
    }
    
    public List<String> getHeaderNames() {
        
        return request.getNames();
    }
    
    public String getHeaderValue(String name) {
        
        return request.getValue(name);
    }
    
    public String getBody() {
        
        try {
            return new String(RequestUtils.readBody(getBodyAsStream()));
        } catch (IOException e) {
            throw new RuntimeException("error getting body", e);
        }
    }
    
    public InputStream getBodyAsStream() throws IOException {
        
        return request.getInputStream();
    }
    
    public <T> T getBody(Class<T> type) {
        
        Unmarshaller unmarshaller = unmarshallerProvider.getUnmarshaller(getContentType());