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;
}