Search in sources :

Example 16 with ArgumentException

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);
}
Also used : SocketClientHandler(net.morimekta.providence.thrift.client.SocketClientHandler) NonblockingSocketClientHandler(net.morimekta.providence.thrift.client.NonblockingSocketClientHandler) NonblockingSocketClientHandler(net.morimekta.providence.thrift.client.NonblockingSocketClientHandler) HashMap(java.util.HashMap) HttpRequestFactory(com.google.api.client.http.HttpRequestFactory) InetSocketAddress(java.net.InetSocketAddress) GenericUrl(com.google.api.client.http.GenericUrl) URI(java.net.URI) NetHttpTransport(com.google.api.client.http.javanet.NetHttpTransport) HttpTransport(com.google.api.client.http.HttpTransport) SetHeadersInitializer(net.morimekta.providence.tools.rpc.utils.SetHeadersInitializer) NetHttpTransport(com.google.api.client.http.javanet.NetHttpTransport) ArgumentException(net.morimekta.console.args.ArgumentException) ThriftSerializerProvider(net.morimekta.providence.thrift.ThriftSerializerProvider) SerializerProvider(net.morimekta.providence.serializer.SerializerProvider) HttpClientHandler(net.morimekta.providence.client.HttpClientHandler) ThriftSerializerProvider(net.morimekta.providence.thrift.ThriftSerializerProvider) Serializer(net.morimekta.providence.serializer.Serializer)

Example 17 with ArgumentException

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;
}
Also used : ThriftSerializerProvider(net.morimekta.providence.thrift.ThriftSerializerProvider) Parser.dir(net.morimekta.console.util.Parser.dir) URISyntaxException(java.net.URISyntaxException) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) Parser.i32(net.morimekta.console.util.Parser.i32) HashMap(java.util.HashMap) HttpClientHandler(net.morimekta.providence.client.HttpClientHandler) MessageWriter(net.morimekta.providence.mio.MessageWriter) ParseException(net.morimekta.providence.reflect.parser.ParseException) ConvertStream(net.morimekta.providence.tools.common.formats.ConvertStream) Argument(net.morimekta.console.args.Argument) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) SocketClientHandler(net.morimekta.providence.thrift.client.SocketClientHandler) Flag(net.morimekta.console.args.Flag) PService(net.morimekta.providence.descriptor.PService) Map(java.util.Map) GenericUrl(com.google.api.client.http.GenericUrl) NonblockingSocketClientHandler(net.morimekta.providence.thrift.client.NonblockingSocketClientHandler) FormatUtils(net.morimekta.providence.tools.common.formats.FormatUtils) Strings(net.morimekta.util.Strings) ConvertStreamParser(net.morimekta.providence.tools.common.formats.ConvertStreamParser) URI(java.net.URI) Parser.oneOf(net.morimekta.console.util.Parser.oneOf) ArgumentParser(net.morimekta.console.args.ArgumentParser) NetHttpTransport(com.google.api.client.http.javanet.NetHttpTransport) Serializer(net.morimekta.providence.serializer.Serializer) SerializerProvider(net.morimekta.providence.serializer.SerializerProvider) HttpRequestFactory(com.google.api.client.http.HttpRequestFactory) CProgram(net.morimekta.providence.reflect.contained.CProgram) HttpTransport(com.google.api.client.http.HttpTransport) PServiceCallHandler(net.morimekta.providence.PServiceCallHandler) SetHeadersInitializer(net.morimekta.providence.tools.rpc.utils.SetHeadersInitializer) Set(java.util.Set) CommonOptions(net.morimekta.providence.tools.common.CommonOptions) IOException(java.io.IOException) InetSocketAddress(java.net.InetSocketAddress) Collectors(java.util.stream.Collectors) File(java.io.File) ArgumentException(net.morimekta.console.args.ArgumentException) List(java.util.List) STTY(net.morimekta.console.util.STTY) ThriftProgramParser(net.morimekta.providence.reflect.parser.ThriftProgramParser) Option(net.morimekta.console.args.Option) MessageReader(net.morimekta.providence.mio.MessageReader) Format(net.morimekta.providence.tools.common.formats.Format) TypeLoader(net.morimekta.providence.reflect.TypeLoader) Argument(net.morimekta.console.args.Argument) Option(net.morimekta.console.args.Option) ArgumentException(net.morimekta.console.args.ArgumentException) URISyntaxException(java.net.URISyntaxException) ArgumentParser(net.morimekta.console.args.ArgumentParser) Flag(net.morimekta.console.args.Flag) URI(java.net.URI) ConvertStreamParser(net.morimekta.providence.tools.common.formats.ConvertStreamParser)

Aggregations

ArgumentException (net.morimekta.console.args.ArgumentException)17 File (java.io.File)9 IOException (java.io.IOException)9 ArgumentParser (net.morimekta.console.args.ArgumentParser)6 PService (net.morimekta.providence.descriptor.PService)5 TreeSet (java.util.TreeSet)4 TypeLoader (net.morimekta.providence.reflect.TypeLoader)4 CProgram (net.morimekta.providence.reflect.contained.CProgram)4 SerializerException (net.morimekta.providence.serializer.SerializerException)4 GeneratorFactory (net.morimekta.providence.generator.GeneratorFactory)3 MessageReader (net.morimekta.providence.mio.MessageReader)3 MessageWriter (net.morimekta.providence.mio.MessageWriter)3 ParseException (net.morimekta.providence.reflect.parser.ParseException)3 Format (net.morimekta.providence.tools.common.formats.Format)3 GenericUrl (com.google.api.client.http.GenericUrl)2 HttpRequestFactory (com.google.api.client.http.HttpRequestFactory)2 HttpTransport (com.google.api.client.http.HttpTransport)2 NetHttpTransport (com.google.api.client.http.javanet.NetHttpTransport)2 UncheckedIOException (java.io.UncheckedIOException)2 InetSocketAddress (java.net.InetSocketAddress)2