public <T extends PlcTransportConfiguration> T createTransportConfiguration(Class<T> pClazz, String protocolCode,
                                                                                String transportCode, String transportConfig,
                                                                                String paramString) {
        // Get a map of all parameters in the connection string.
        Map<String, List<String>> paramStringValues = splitQuery(paramString);
        // Filter out the properties, that don't have the current transport code as prefix.
        String prefix = transportCode + ".";
        Map<String, List<String>> filteredParamStringValues = new HashMap<>();
        for (String paramName : paramStringValues.keySet()) {
            if(paramName.startsWith(prefix)) {
                filteredParamStringValues.put(paramName.substring(prefix.length()), paramStringValues.get(paramName));
            }
        }
        return createConfiguration(pClazz, protocolCode, transportCode, transportConfig, filteredParamStringValues);
    }
A query contains for our cases mostly of three parts
- protocol identifier
- (optional) transport identifier
- connection address (ip/port), serial port, path (depending on the type of transport) ...
- (optional) path parameters
plc4j/spi/src/main/java/org/apache/plc4x/java/spi/configuration/ConfigurationFactory.java