use of net.morimekta.console.args.ArgumentException in project providence by morimekta.
the class RPCOptions method getHandler.
public PServiceCallHandler getHandler() {
Serializer serializer = getSerializer(format);
URI uri = URI.create(endpoint);
if (uri.getScheme() == null || uri.getScheme().length() == 0) {
throw new ArgumentException("No protocol on URI: " + endpoint);
}
if (uri.getScheme().startsWith("thrift")) {
if (// Must have host and port.
(uri.getPort() < 1) || (uri.getHost() == null || uri.getHost().length() == 0) || // No path, query or fragment.
(uri.getFragment() != null && uri.getFragment().length() > 0) || (uri.getQuery() != null && uri.getQuery().length() > 0) || (uri.getPath() != null && uri.getPath().length() > 0)) {
throw new ArgumentException("Illegal thrift URI: " + endpoint);
}
InetSocketAddress address = new InetSocketAddress(uri.getHost(), uri.getPort());
switch(uri.getScheme()) {
case "thrift":
return new SocketClientHandler(serializer, address, connect_timeout, read_timeout);
case "thrift+nonblocking":
return new NonblockingSocketClientHandler(serializer, address, connect_timeout, read_timeout);
default:
throw new ArgumentException("Unknown thrift protocol " + uri.getScheme());
}
}
GenericUrl url = new GenericUrl(endpoint);
Map<String, String> hdrs = new HashMap<>();
for (String hdr : headers) {
String[] parts = hdr.split("[:]", 2);
if (parts.length != 2) {
throw new ArgumentException("Invalid headers param: " + hdr);
}
hdrs.put(parts[0].trim(), parts[1].trim());
}
HttpTransport transport = new NetHttpTransport();
HttpRequestFactory factory = transport.createRequestFactory(new SetHeadersInitializer(hdrs, connect_timeout, read_timeout));
SerializerProvider serializerProvider = new ThriftSerializerProvider(serializer.mediaType());
return new HttpClientHandler(() -> url, factory, serializerProvider);
}
use of net.morimekta.console.args.ArgumentException in project providence by morimekta.
the class RPCOptions method getArgumentParser.
@Override
public ArgumentParser getArgumentParser(String prog, String description) throws IOException {
ArgumentParser parser = super.getArgumentParser(prog, description);
parser.add(new Option("--include", "I", "dir", "Allow includes of files in directory", dir(this::addInclude), null, true, false, false));
parser.add(new Option("--in", "i", "spec", "Input specification", new ConvertStreamParser(in).andApply(this::setIn), in.toString()));
parser.add(new Option("--out", "o", "spec", "Output Specification", new ConvertStreamParser(out).andApply(this::setOut), out.toString()));
parser.add(new Option("--service", "s", "srv", "Qualified identifier name from definitions to use for parsing source file.", this::setService, null, false, true, false));
parser.add(new Option("--format", "f", "fmt", "Request RPC format", oneOf(Format.class, this::setFormat), format.name()));
parser.add(new Option("--connect_timeout", "C", "ms", "Connection timeout in milliseconds. 0 means infinite.", i32(this::setConnectTimeout), "10000"));
parser.add(new Option("--read_timeout", "R", "ms", "Request timeout in milliseconds. 0 means infinite.", i32(this::setReadTimeout), "10000"));
parser.add(new Option("--header", "H", "hdr", "Header to set on the request, K/V separated by ':'.", this::addHeaders, null, true, false, false));
parser.add(new Flag("--strict", "S", "Read incoming messages strictly.", this::setStrict));
parser.add(new Argument("URI", "The endpoint URI", this::setEndpoint, null, s -> {
try {
if (!s.contains("://"))
return false;
URI uri = new URI(s);
if (isNullOrEmpty(uri.getAuthority())) {
throw new ArgumentException("Missing authority in URI: '" + s + "'");
}
return true;
} catch (URISyntaxException e) {
throw new ArgumentException(e, e.getMessage());
}
}, false, true, false));
return parser;
}
Aggregations