Mimic MethodDescriptor in ServerMethodDefinition when serializing messages.

There is little use in providing the Marshallers directly from the
Definition.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74790187
diff --git a/core/src/main/java/com/google/net/stubby/ServerInterceptors.java b/core/src/main/java/com/google/net/stubby/ServerInterceptors.java
index a8a2c96..8afc5d4 100644
--- a/core/src/main/java/com/google/net/stubby/ServerInterceptors.java
+++ b/core/src/main/java/com/google/net/stubby/ServerInterceptors.java
@@ -39,8 +39,7 @@
       List<ServerInterceptor> interceptors) {
     ServerCallHandler<ReqT, RespT> callHandler
         = InterceptCallHandler.create(interceptors, method.getServerCallHandler());
-    serviceDefBuilder.addMethod(method.getName(), method.getRequestMarshaller(),
-        method.getResponseMarshaller(), callHandler);
+    serviceDefBuilder.addMethod(method.withServerCallHandler(callHandler));
   }
 
   private static class InterceptCallHandler<ReqT, RespT> implements ServerCallHandler<ReqT, RespT> {
diff --git a/core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java b/core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java
index 416accb..14644f0 100644
--- a/core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java
+++ b/core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java
@@ -1,5 +1,7 @@
 package com.google.net.stubby;
 
+import java.io.InputStream;
+
 /** Definition of a method supported by a service. */
 public final class ServerMethodDefinition<RequestT, ResponseT> {
   private final String name;
@@ -22,18 +24,25 @@
     return name;
   }
 
-  /** Marshaller for deserializing incoming requests. */
-  public Marshaller<RequestT> getRequestMarshaller() {
-    return requestMarshaller;
+  /** Deserialize an incoming request message. */
+  public RequestT parseRequest(InputStream input) {
+    return requestMarshaller.parse(input);
   }
 
-  /** Marshaller for serializing outgoing responses. */
-  public Marshaller<ResponseT> getResponseMarshaller() {
-    return responseMarshaller;
+  /** Serialize an outgoing response message. */
+  public InputStream streamResponse(ResponseT response) {
+    return responseMarshaller.stream(response);
   }
 
   /** Handler for incoming calls. */
   public ServerCallHandler<RequestT, ResponseT> getServerCallHandler() {
     return handler;
   }
+
+  /** Create a new method definition with a different call handler. */
+  public ServerMethodDefinition<RequestT, ResponseT> withServerCallHandler(
+      ServerCallHandler<RequestT, ResponseT> handler) {
+    return new ServerMethodDefinition<RequestT, ResponseT>(
+        name, requestMarshaller, responseMarshaller, handler);
+  }
 }
diff --git a/core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java b/core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java
index b069cac..4b0869d 100644
--- a/core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java
+++ b/core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java
@@ -59,15 +59,19 @@
      */
     public <ReqT, RespT> Builder addMethod(String name, Marshaller<ReqT> requestMarshaller,
         Marshaller<RespT> responseMarshaller, ServerCallHandler<ReqT, RespT> handler) {
-      Preconditions.checkNotNull(name, "name must not be null");
-      if (methodLookup.containsKey(name)) {
-        throw new IllegalStateException("Method by same name already registered");
-      }
-      ServerMethodDefinition<ReqT, RespT> def = new ServerMethodDefinition<ReqT, RespT>(name,
+      return addMethod(new ServerMethodDefinition<ReqT, RespT>(
+          Preconditions.checkNotNull(name, "name must not be null"),
           Preconditions.checkNotNull(requestMarshaller, "requestMarshaller must not be null"),
           Preconditions.checkNotNull(responseMarshaller, "responseMarshaller must not be null"),
-          Preconditions.checkNotNull(handler, "handler must not be null"));
-      methodLookup.put(name, def);
+          Preconditions.checkNotNull(handler, "handler must not be null")));
+    }
+
+    /** Add a method to be supported by the service. */
+    public <ReqT, RespT> Builder addMethod(ServerMethodDefinition<ReqT, RespT> def) {
+      if (methodLookup.containsKey(def.getName())) {
+        throw new IllegalStateException("Method by same name already registered");
+      }
+      methodLookup.put(def.getName(), def);
       methods.add(def);
       return this;
     }