Search in sources :

Example 16 with JsonParseException

use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParseException in project fabric8 by jboss-fuse.

the class ClusterListAction method printCluster.

protected void printCluster(String dir, PrintStream out) throws Exception {
    // do we have any clusters at all?
    if (exists(getCurator(), dir) == null) {
        return;
    }
    List<String> children = getAllChildren(getCurator(), dir);
    Map<String, Map<String, ClusterNode>> clusters = new TreeMap<String, Map<String, ClusterNode>>();
    for (String child : children) {
        byte[] data = getCurator().getData().forPath(child);
        if (data != null && data.length > 0) {
            String text = new String(data).trim();
            if (!text.isEmpty()) {
                String clusterName = getClusterName(dir, child);
                Map<String, ClusterNode> cluster = clusters.get(clusterName);
                if (cluster == null) {
                    cluster = new TreeMap<String, ClusterNode>();
                    clusters.put(clusterName, cluster);
                }
                ObjectMapper mapper = new ObjectMapper();
                Map<String, Object> map = null;
                try {
                    map = mapper.readValue(data, HashMap.class);
                } catch (JsonParseException e) {
                    log.error("Error parsing JSON string: {}", text);
                    throw e;
                }
                ClusterNode node = null;
                Object id = value(map, "id", "container");
                if (id != null) {
                    Object agent = value(map, "container", "agent");
                    List services = (List) value(map, "services");
                    node = cluster.get(id);
                    if (node == null) {
                        node = new ClusterNode();
                        cluster.put(id.toString(), node);
                    }
                    if (services != null) {
                        if (!services.isEmpty()) {
                            for (Object service : services) {
                                node.services.add(getSubstitutedData(getCurator(), service.toString()));
                            }
                            node.masters.add(agent);
                        } else {
                            node.slaves.add(agent);
                        }
                    } else {
                        Object started = value(map, "started");
                        if (started == Boolean.TRUE) {
                            node.masters.add(agent);
                        } else {
                            node.slaves.add(agent);
                        }
                    }
                }
            }
        }
    }
    TablePrinter table = new TablePrinter();
    table.columns("cluster", "masters", "slaves", "services");
    for (String clusterName : clusters.keySet()) {
        Map<String, ClusterNode> nodes = clusters.get(clusterName);
        table.row(clusterName, "", "", "", "");
        for (String nodeName : nodes.keySet()) {
            ClusterNode node = nodes.get(nodeName);
            table.row("   " + nodeName, printList(node.masters), printList(node.slaves), printList(node.services));
        }
    }
    table.print();
}
Also used : HashMap(java.util.HashMap) TreeMap(java.util.TreeMap) JsonParseException(com.fasterxml.jackson.core.JsonParseException) TablePrinter(io.fabric8.utils.TablePrinter) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) TreeMap(java.util.TreeMap) Map(java.util.Map) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 17 with JsonParseException

use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParseException in project keycloak by keycloak.

the class ParseUtil method parseFileOrStdin.

public static CmdStdinContext parseFileOrStdin(String file, EndpointType type) {
    String content = readFileOrStdin(file).trim();
    ClientRepresentation client = null;
    OIDCClientRepresentation oidcClient = null;
    if (type == null) {
        // guess the correct endpoint from content of the file
        if (content.startsWith("<")) {
            // looks like XML
            type = EndpointType.SAML2;
        } else if (content.startsWith("{")) {
            // try parse as ClientRepresentation
            try {
                client = JsonSerialization.readValue(content, ClientRepresentation.class);
                type = EndpointType.DEFAULT;
            } catch (JsonParseException e) {
                throw new RuntimeException("Failed to read the input document as JSON: " + e.getMessage(), e);
            } catch (Exception ignored) {
            // deliberately not logged
            }
            if (client == null) {
                // try parse as OIDCClientRepresentation
                try {
                    oidcClient = JsonSerialization.readValue(content, OIDCClientRepresentation.class);
                    type = EndpointType.OIDC;
                } catch (IOException ne) {
                    throw new RuntimeException("Unable to determine input document type. Use -e TYPE to specify the registration endpoint to use");
                } catch (Exception e) {
                    throw new RuntimeException("Failed to read the input document as JSON", e);
                }
            }
        } else if (content.length() == 0) {
            throw new RuntimeException("Document provided by --file option is empty");
        } else {
            throw new RuntimeException("Unable to determine input document type. Use -e TYPE to specify the registration endpoint to use");
        }
    }
    // check content type, making sure it can be parsed into .json if it's not saml xml
    if (content != null) {
        try {
            if (type == EndpointType.DEFAULT && client == null) {
                client = JsonSerialization.readValue(content, ClientRepresentation.class);
            } else if (type == EndpointType.OIDC && oidcClient == null) {
                oidcClient = JsonSerialization.readValue(content, OIDCClientRepresentation.class);
            }
        } catch (JsonParseException e) {
            throw new RuntimeException("Not a valid JSON document - " + e.getMessage(), e);
        } catch (UnrecognizedPropertyException e) {
            throw new RuntimeException("Attribute '" + e.getPropertyName() + "' not supported on document type '" + type.getName() + "'", e);
        } catch (IOException e) {
            throw new RuntimeException("Not a valid JSON document", e);
        }
    }
    CmdStdinContext ctx = new CmdStdinContext();
    ctx.setEndpointType(type);
    ctx.setContent(content);
    ctx.setClient(client);
    ctx.setOidcClient(oidcClient);
    return ctx;
}
Also used : OIDCClientRepresentation(org.keycloak.representations.oidc.OIDCClientRepresentation) CmdStdinContext(org.keycloak.client.registration.cli.common.CmdStdinContext) UnrecognizedPropertyException(com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException) IOException(java.io.IOException) JsonParseException(com.fasterxml.jackson.core.JsonParseException) UnrecognizedPropertyException(com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException) IOException(java.io.IOException) JsonParseException(com.fasterxml.jackson.core.JsonParseException) ClientRepresentation(org.keycloak.representations.idm.ClientRepresentation) OIDCClientRepresentation(org.keycloak.representations.oidc.OIDCClientRepresentation)

Example 18 with JsonParseException

use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParseException in project keycloak by keycloak.

the class UpdateCmd method execute.

@Override
public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
    List<AttributeOperation> attrs = new LinkedList<>();
    try {
        if (printHelp()) {
            return help ? CommandResult.SUCCESS : CommandResult.FAILURE;
        }
        processGlobalOptions();
        String clientId = null;
        if (args != null) {
            Iterator<String> it = args.iterator();
            if (!it.hasNext()) {
                throw new IllegalArgumentException("CLIENT_ID not specified");
            }
            clientId = it.next();
            if (clientId.startsWith("-")) {
                warnfErr(ParseUtil.CLIENT_OPTION_WARN, clientId);
            }
            while (it.hasNext()) {
                String option = it.next();
                switch(option) {
                    case "-s":
                    case "--set":
                        {
                            if (!it.hasNext()) {
                                throw new IllegalArgumentException("Option " + option + " requires a value");
                            }
                            String[] keyVal = parseKeyVal(it.next());
                            attrs.add(new AttributeOperation(SET, keyVal[0], keyVal[1]));
                            break;
                        }
                    case "-d":
                    case "--delete":
                        {
                            attrs.add(new AttributeOperation(DELETE, it.next()));
                            break;
                        }
                    default:
                        {
                            throw new IllegalArgumentException("Unsupported option: " + option);
                        }
                }
            }
        }
        if (file == null && attrs.size() == 0) {
            throw new IllegalArgumentException("No file nor attribute values specified");
        }
        // 
        if (file == null && attrs.size() > 0) {
            mergeMode = true;
        }
        CmdStdinContext ctx = new CmdStdinContext();
        if (file != null) {
            ctx = parseFileOrStdin(file, regType);
            regType = ctx.getEndpointType();
        }
        if (regType == null) {
            regType = DEFAULT;
            ctx.setEndpointType(regType);
        } else if (regType != DEFAULT && regType != OIDC) {
            throw new RuntimeException("Update not supported for endpoint type: " + regType.getEndpoint());
        }
        // initialize config only after reading from stdin,
        // to allow proper operation when piping 'get' - which consumes the old
        // registration access token, and saves the new one to the config
        ConfigData config = loadConfig();
        config = copyWithServerInfo(config);
        final String server = config.getServerUrl();
        final String realm = config.getRealm();
        if (token == null) {
            // if registration access token is not set via --token, see if it's in the body of any input file
            // but first see if it's overridden by --set, or maybe deliberately muted via -d registrationAccessToken
            boolean processed = false;
            for (AttributeOperation op : attrs) {
                if ("registrationAccessToken".equals(op.getKey().toString())) {
                    processed = true;
                    if (op.getType() == AttributeOperation.Type.SET) {
                        token = op.getValue();
                    }
                    // otherwise it's delete - meaning it should stay null
                    break;
                }
            }
            if (!processed) {
                token = ctx.getRegistrationAccessToken();
            }
        }
        if (token == null) {
            // if registration access token is not set, try use the one from configuration
            token = getRegistrationToken(config.sessionRealmConfigData(), clientId);
        }
        setupTruststore(config, commandInvocation);
        String auth = token;
        if (auth == null) {
            config = ensureAuthInfo(config, commandInvocation);
            config = copyWithServerInfo(config);
            if (credentialsAvailable(config)) {
                auth = ensureToken(config);
            }
        }
        auth = auth != null ? "Bearer " + auth : null;
        if (mergeMode) {
            InputStream response = doGet(server + "/realms/" + realm + "/clients-registrations/" + regType.getEndpoint() + "/" + urlencode(clientId), APPLICATION_JSON, auth);
            String json = readFully(response);
            CmdStdinContext ctxremote = new CmdStdinContext();
            ctxremote.setContent(json);
            ctxremote.setEndpointType(regType);
            try {
                if (regType == DEFAULT) {
                    ctxremote.setClient(JsonSerialization.readValue(json, ClientRepresentation.class));
                    token = ctxremote.getClient().getRegistrationAccessToken();
                } else if (regType == OIDC) {
                    ctxremote.setOidcClient(JsonSerialization.readValue(json, OIDCClientRepresentation.class));
                    token = ctxremote.getOidcClient().getRegistrationAccessToken();
                }
            } catch (JsonParseException e) {
                throw new RuntimeException("Not a valid JSON document. " + e.getMessage(), e);
            } catch (IOException e) {
                throw new RuntimeException("Not a valid JSON document", e);
            }
            // that ensures optimistic locking semantics
            if (token != null) {
                // we use auth with doPost later
                auth = "Bearer " + token;
                String newToken = token;
                String clientToUpdate = clientId;
                saveMergeConfig(cfg -> {
                    setRegistrationToken(cfg.ensureRealmConfigData(server, realm), clientToUpdate, newToken);
                });
            }
            // merge local representation over remote one
            if (ctx.getClient() != null) {
                ReflectionUtil.merge(ctx.getClient(), ctxremote.getClient());
            } else if (ctx.getOidcClient() != null) {
                ReflectionUtil.merge(ctx.getOidcClient(), ctxremote.getOidcClient());
            }
            ctx = ctxremote;
        }
        if (attrs.size() > 0) {
            ctx = mergeAttributes(ctx, attrs);
        }
        // now update
        InputStream response = doPut(server + "/realms/" + realm + "/clients-registrations/" + regType.getEndpoint() + "/" + urlencode(clientId), APPLICATION_JSON, APPLICATION_JSON, ctx.getContent(), auth);
        try {
            if (regType == DEFAULT) {
                ClientRepresentation clirep = JsonSerialization.readValue(response, ClientRepresentation.class);
                outputResult(clirep);
                token = clirep.getRegistrationAccessToken();
            } else if (regType == OIDC) {
                OIDCClientRepresentation clirep = JsonSerialization.readValue(response, OIDCClientRepresentation.class);
                outputResult(clirep);
                token = clirep.getRegistrationAccessToken();
            }
            String newToken = token;
            String clientToUpdate = clientId;
            saveMergeConfig(cfg -> {
                setRegistrationToken(cfg.ensureRealmConfigData(server, realm), clientToUpdate, newToken);
            });
        } catch (IOException e) {
            throw new RuntimeException("Failed to process HTTP response", e);
        }
        return CommandResult.SUCCESS;
    } catch (IllegalArgumentException e) {
        throw new IllegalArgumentException(e.getMessage() + suggestHelp(), e);
    } finally {
        commandInvocation.stop();
    }
}
Also used : AttributeOperation(org.keycloak.client.registration.cli.common.AttributeOperation) InputStream(java.io.InputStream) IOException(java.io.IOException) JsonParseException(com.fasterxml.jackson.core.JsonParseException) LinkedList(java.util.LinkedList) OIDCClientRepresentation(org.keycloak.representations.oidc.OIDCClientRepresentation) ClientRepresentation(org.keycloak.representations.idm.ClientRepresentation) OIDCClientRepresentation(org.keycloak.representations.oidc.OIDCClientRepresentation) ConfigData(org.keycloak.client.registration.cli.config.ConfigData) CmdStdinContext(org.keycloak.client.registration.cli.common.CmdStdinContext)

Example 19 with JsonParseException

use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParseException in project keycloak by keycloak.

the class ParseUtil method parseFileOrStdin.

public static CmdStdinContext<JsonNode> parseFileOrStdin(String file) {
    String content = readFileOrStdin(file).trim();
    JsonNode result = null;
    if (content.length() == 0) {
        throw new RuntimeException("Document provided by --file option is empty");
    }
    try {
        result = JsonSerialization.readValue(content, JsonNode.class);
    } catch (JsonParseException e) {
        throw new RuntimeException("Not a valid JSON document - " + e.getMessage(), e);
    } catch (IOException e) {
        throw new RuntimeException("Failed to read the input document as JSON: " + e.getMessage(), e);
    } catch (Exception e) {
        throw new RuntimeException("Not a valid JSON document", e);
    }
    CmdStdinContext<JsonNode> ctx = new CmdStdinContext<>();
    ctx.setContent(content);
    ctx.setResult(result);
    return ctx;
}
Also used : CmdStdinContext(org.keycloak.client.admin.cli.common.CmdStdinContext) JsonNode(com.fasterxml.jackson.databind.JsonNode) IOException(java.io.IOException) JsonParseException(com.fasterxml.jackson.core.JsonParseException) IOException(java.io.IOException) JsonParseException(com.fasterxml.jackson.core.JsonParseException)

Example 20 with JsonParseException

use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParseException in project keycloak by keycloak.

the class ReflectionUtil method convertValueToList.

public static List convertValueToList(String value, Class itemType) {
    try {
        List result = new LinkedList();
        if (!value.startsWith("[")) {
            throw new RuntimeException("List attribute value has to start with '[' - '" + value + "'");
        }
        List parsed = JsonSerialization.readValue(value, List.class);
        for (Object item : parsed) {
            if (itemType.isAssignableFrom(item.getClass())) {
                result.add(item);
            } else {
                result.add(convertValueToType(item, itemType));
            }
        }
        return result;
    } catch (JsonParseException e) {
        throw new RuntimeException("Failed to parse list value: " + e.getMessage(), e);
    } catch (IOException e) {
        throw new RuntimeException("Failed to parse list value: " + value, e);
    }
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) LinkedList(java.util.LinkedList) IOException(java.io.IOException) JsonParseException(com.fasterxml.jackson.core.JsonParseException) LinkedList(java.util.LinkedList)

Aggregations

JsonParseException (com.fasterxml.jackson.core.JsonParseException)145 IOException (java.io.IOException)75 JsonMappingException (com.fasterxml.jackson.databind.JsonMappingException)58 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)36 JsonParser (com.fasterxml.jackson.core.JsonParser)23 JsonNode (com.fasterxml.jackson.databind.JsonNode)20 Map (java.util.Map)19 JsonToken (com.fasterxml.jackson.core.JsonToken)15 InputStream (java.io.InputStream)15 ArrayList (java.util.ArrayList)14 Test (org.junit.Test)14 HashMap (java.util.HashMap)12 File (java.io.File)11 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)9 JsonFactory (com.fasterxml.jackson.core.JsonFactory)7 JsonLocation (com.fasterxml.jackson.core.JsonLocation)6 ByteArrayOutputStream (java.io.ByteArrayOutputStream)5 InputStreamReader (java.io.InputStreamReader)5 Date (java.util.Date)5 GZIPInputStream (java.util.zip.GZIPInputStream)5