gRPC Java client with TLS Mutual authentication
The English Debate
Does fire aspect on a sword, destroy mob drops?
Why I don't get the wanted width of tcbox?
How to test the sharpness of a knife?
Nested Dynamic SOQL Query
Which partition to make active?
Recursively updating the MLE as new observations stream in
How can a new country break out from a developed country without war?
Print last inputted byte
10 year ban after applying for a UK student visa
Why is "la Gestapo" feminine?
Is VPN a layer 3 concept?
I got the following comment from a reputed math journal. What does it mean?
Determine voltage drop over 10G resistors with cheap multimeter
What is it called when someone votes for an option that's not their first choice?
Hackerrank All Women's Codesprint 2019: Name the Product
Is xar preinstalled on macOS?
UK Tourist Visa- Enquiry
Does convergence of polynomials imply that of its coefficients?
How old is Nick Fury?
Why is participating in the European Parliamentary elections used as a threat?
Do people actually use the word "kaputt" in conversation?
Hot air balloons as primitive bombers
Emojional cryptic crossword
gRPC Java client with TLS Mutual authentication
$begingroup$
I'm not a Java developer but I'm trying to put together a quick start snippet to help Java users consume our service using code generated from .proto service definitions.
I've cobbled together some code, drawing from the examples in grpc/grpc-java, but I don't feel comfortable with how the host and port parameters are being set, or with the null return from the createUser
method.
I'd appreciate any feedback on how easy the code below would be to implement, and highlight any significant issues or improvements that could be made to improve performance and developer productivity.
Example User Client class:
package com.example.UserClient;
import io.grpc.ManagedChannel;
import io.grpc.StatusRuntimeException;
import io.grpc.testing.TestUtils;
import io.grpc.netty.GrpcSslContexts;
import io.grpc.netty.NegotiationType;
import io.grpc.netty.NettyChannelBuilder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import javax.net.ssl.SSLException;
import java.io.File;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.example.UserGrpc;
import com.example.UserGrpc.UserBlockingStub;
import com.example.UserOuterClass.NewUser;
import com.example.UserOuterClass.NewUserResponse;
public class UserClient
private static final Logger logger = Logger.getLogger(UserClient.class.getName());
private static String host;
private static int port;
private final ManagedChannel channel;
private final UserBlockingStub userStub;
private static SslContext buildSslContext(String h, int p, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
mHost = host;
mPort = port;
return GrpcSslContexts.forClient()
.trustManager(new File(trustFile))
.keyManager(new File(clientCertFile), new File(clientKeyFile))
.build();
public QuickStart(String host, int port, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
this(buildSslContext(host, port, trustFile, clientCertFile, clientKeyFile));
public QuickStart(SslContext sslContext) throws SSLException
this(NettyChannelBuilder.forAddress(host, port)
.negotiationType(NegotiationType.TLS)
.sslContext(sslContext)
.build());
QuickStart(ManagedChannel channel)
this.channel = channel;
userStub = UserGrpc.newBlockingStub(channel);
public NewUserResponse createUser(NewUser user)
NewUserResponse newUser;
try
newUser = userStub.createUser(user);
return newUser;
catch (StatusRuntimeException e)
logger.log(Level.WARNING, "RPC failed: 0", e.getStatus());
return null;
// Other method implementations....
public void shutdown() throws InterruptedException
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
Consuming the class:
UserClient client;
try
client = new UserClient("api.example.com", 443, "ca.pem", "client.pem", "client-key.pem");
NewUser user = NewUser.newBuilder()
.setUsername("TestyMcTest")
.setEmailAddress("Testy.McTest@testy.com")
// additional params...
.build();
NewUserResponse response = client.createUser(user);
catch(Exception e)
e.printStackTrace();
java protocol-buffers
New contributor
$endgroup$
add a comment |
$begingroup$
I'm not a Java developer but I'm trying to put together a quick start snippet to help Java users consume our service using code generated from .proto service definitions.
I've cobbled together some code, drawing from the examples in grpc/grpc-java, but I don't feel comfortable with how the host and port parameters are being set, or with the null return from the createUser
method.
I'd appreciate any feedback on how easy the code below would be to implement, and highlight any significant issues or improvements that could be made to improve performance and developer productivity.
Example User Client class:
package com.example.UserClient;
import io.grpc.ManagedChannel;
import io.grpc.StatusRuntimeException;
import io.grpc.testing.TestUtils;
import io.grpc.netty.GrpcSslContexts;
import io.grpc.netty.NegotiationType;
import io.grpc.netty.NettyChannelBuilder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import javax.net.ssl.SSLException;
import java.io.File;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.example.UserGrpc;
import com.example.UserGrpc.UserBlockingStub;
import com.example.UserOuterClass.NewUser;
import com.example.UserOuterClass.NewUserResponse;
public class UserClient
private static final Logger logger = Logger.getLogger(UserClient.class.getName());
private static String host;
private static int port;
private final ManagedChannel channel;
private final UserBlockingStub userStub;
private static SslContext buildSslContext(String h, int p, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
mHost = host;
mPort = port;
return GrpcSslContexts.forClient()
.trustManager(new File(trustFile))
.keyManager(new File(clientCertFile), new File(clientKeyFile))
.build();
public QuickStart(String host, int port, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
this(buildSslContext(host, port, trustFile, clientCertFile, clientKeyFile));
public QuickStart(SslContext sslContext) throws SSLException
this(NettyChannelBuilder.forAddress(host, port)
.negotiationType(NegotiationType.TLS)
.sslContext(sslContext)
.build());
QuickStart(ManagedChannel channel)
this.channel = channel;
userStub = UserGrpc.newBlockingStub(channel);
public NewUserResponse createUser(NewUser user)
NewUserResponse newUser;
try
newUser = userStub.createUser(user);
return newUser;
catch (StatusRuntimeException e)
logger.log(Level.WARNING, "RPC failed: 0", e.getStatus());
return null;
// Other method implementations....
public void shutdown() throws InterruptedException
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
Consuming the class:
UserClient client;
try
client = new UserClient("api.example.com", 443, "ca.pem", "client.pem", "client-key.pem");
NewUser user = NewUser.newBuilder()
.setUsername("TestyMcTest")
.setEmailAddress("Testy.McTest@testy.com")
// additional params...
.build();
NewUserResponse response = client.createUser(user);
catch(Exception e)
e.printStackTrace();
java protocol-buffers
New contributor
$endgroup$
add a comment |
$begingroup$
I'm not a Java developer but I'm trying to put together a quick start snippet to help Java users consume our service using code generated from .proto service definitions.
I've cobbled together some code, drawing from the examples in grpc/grpc-java, but I don't feel comfortable with how the host and port parameters are being set, or with the null return from the createUser
method.
I'd appreciate any feedback on how easy the code below would be to implement, and highlight any significant issues or improvements that could be made to improve performance and developer productivity.
Example User Client class:
package com.example.UserClient;
import io.grpc.ManagedChannel;
import io.grpc.StatusRuntimeException;
import io.grpc.testing.TestUtils;
import io.grpc.netty.GrpcSslContexts;
import io.grpc.netty.NegotiationType;
import io.grpc.netty.NettyChannelBuilder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import javax.net.ssl.SSLException;
import java.io.File;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.example.UserGrpc;
import com.example.UserGrpc.UserBlockingStub;
import com.example.UserOuterClass.NewUser;
import com.example.UserOuterClass.NewUserResponse;
public class UserClient
private static final Logger logger = Logger.getLogger(UserClient.class.getName());
private static String host;
private static int port;
private final ManagedChannel channel;
private final UserBlockingStub userStub;
private static SslContext buildSslContext(String h, int p, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
mHost = host;
mPort = port;
return GrpcSslContexts.forClient()
.trustManager(new File(trustFile))
.keyManager(new File(clientCertFile), new File(clientKeyFile))
.build();
public QuickStart(String host, int port, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
this(buildSslContext(host, port, trustFile, clientCertFile, clientKeyFile));
public QuickStart(SslContext sslContext) throws SSLException
this(NettyChannelBuilder.forAddress(host, port)
.negotiationType(NegotiationType.TLS)
.sslContext(sslContext)
.build());
QuickStart(ManagedChannel channel)
this.channel = channel;
userStub = UserGrpc.newBlockingStub(channel);
public NewUserResponse createUser(NewUser user)
NewUserResponse newUser;
try
newUser = userStub.createUser(user);
return newUser;
catch (StatusRuntimeException e)
logger.log(Level.WARNING, "RPC failed: 0", e.getStatus());
return null;
// Other method implementations....
public void shutdown() throws InterruptedException
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
Consuming the class:
UserClient client;
try
client = new UserClient("api.example.com", 443, "ca.pem", "client.pem", "client-key.pem");
NewUser user = NewUser.newBuilder()
.setUsername("TestyMcTest")
.setEmailAddress("Testy.McTest@testy.com")
// additional params...
.build();
NewUserResponse response = client.createUser(user);
catch(Exception e)
e.printStackTrace();
java protocol-buffers
New contributor
$endgroup$
I'm not a Java developer but I'm trying to put together a quick start snippet to help Java users consume our service using code generated from .proto service definitions.
I've cobbled together some code, drawing from the examples in grpc/grpc-java, but I don't feel comfortable with how the host and port parameters are being set, or with the null return from the createUser
method.
I'd appreciate any feedback on how easy the code below would be to implement, and highlight any significant issues or improvements that could be made to improve performance and developer productivity.
Example User Client class:
package com.example.UserClient;
import io.grpc.ManagedChannel;
import io.grpc.StatusRuntimeException;
import io.grpc.testing.TestUtils;
import io.grpc.netty.GrpcSslContexts;
import io.grpc.netty.NegotiationType;
import io.grpc.netty.NettyChannelBuilder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import javax.net.ssl.SSLException;
import java.io.File;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.example.UserGrpc;
import com.example.UserGrpc.UserBlockingStub;
import com.example.UserOuterClass.NewUser;
import com.example.UserOuterClass.NewUserResponse;
public class UserClient
private static final Logger logger = Logger.getLogger(UserClient.class.getName());
private static String host;
private static int port;
private final ManagedChannel channel;
private final UserBlockingStub userStub;
private static SslContext buildSslContext(String h, int p, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
mHost = host;
mPort = port;
return GrpcSslContexts.forClient()
.trustManager(new File(trustFile))
.keyManager(new File(clientCertFile), new File(clientKeyFile))
.build();
public QuickStart(String host, int port, String trustFile, String clientCertFile, String clientKeyFile) throws SSLException
this(buildSslContext(host, port, trustFile, clientCertFile, clientKeyFile));
public QuickStart(SslContext sslContext) throws SSLException
this(NettyChannelBuilder.forAddress(host, port)
.negotiationType(NegotiationType.TLS)
.sslContext(sslContext)
.build());
QuickStart(ManagedChannel channel)
this.channel = channel;
userStub = UserGrpc.newBlockingStub(channel);
public NewUserResponse createUser(NewUser user)
NewUserResponse newUser;
try
newUser = userStub.createUser(user);
return newUser;
catch (StatusRuntimeException e)
logger.log(Level.WARNING, "RPC failed: 0", e.getStatus());
return null;
// Other method implementations....
public void shutdown() throws InterruptedException
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
Consuming the class:
UserClient client;
try
client = new UserClient("api.example.com", 443, "ca.pem", "client.pem", "client-key.pem");
NewUser user = NewUser.newBuilder()
.setUsername("TestyMcTest")
.setEmailAddress("Testy.McTest@testy.com")
// additional params...
.build();
NewUserResponse response = client.createUser(user);
catch(Exception e)
e.printStackTrace();
java protocol-buffers
java protocol-buffers
New contributor
New contributor
New contributor
asked 1 min ago
PassKitPassKit
1012
1012
New contributor
New contributor
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
PassKit is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215723%2fgrpc-java-client-with-tls-mutual-authentication%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
PassKit is a new contributor. Be nice, and check out our Code of Conduct.
PassKit is a new contributor. Be nice, and check out our Code of Conduct.
PassKit is a new contributor. Be nice, and check out our Code of Conduct.
PassKit is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f215723%2fgrpc-java-client-with-tls-mutual-authentication%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown