Home / Class/ OpenSslPopulatedKeyMaterialProvider Class — netty Architecture

OpenSslPopulatedKeyMaterialProvider Class — netty Architecture

Architecture documentation for the OpenSslPopulatedKeyMaterialProvider class in OpenSslX509KeyManagerFactory.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  ca6d2b1d_a32d_d8f0_5415_3c6a33f9511f["OpenSslPopulatedKeyMaterialProvider"]
  892beaa7_380c_8fb8_48c5_080b863277a3["OpenSslX509KeyManagerFactory.java"]
  ca6d2b1d_a32d_d8f0_5415_3c6a33f9511f -->|defined in| 892beaa7_380c_8fb8_48c5_080b863277a3
  c638e981_6d33_8d2c_8482_7a1d0bbe5e42["OpenSslPopulatedKeyMaterialProvider()"]
  ca6d2b1d_a32d_d8f0_5415_3c6a33f9511f -->|method| c638e981_6d33_8d2c_8482_7a1d0bbe5e42
  5d889993_206a_99ba_3c90_673df8022a51["OpenSslKeyMaterial()"]
  ca6d2b1d_a32d_d8f0_5415_3c6a33f9511f -->|method| 5d889993_206a_99ba_3c90_673df8022a51
  84ce87de_7874_61ff_a04d_91559ec5b39c["destroy()"]
  ca6d2b1d_a32d_d8f0_5415_3c6a33f9511f -->|method| 84ce87de_7874_61ff_a04d_91559ec5b39c

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactory.java lines 183–233

            private static final class OpenSslPopulatedKeyMaterialProvider extends OpenSslKeyMaterialProvider {
                private final Map<String, Object> materialMap;

                OpenSslPopulatedKeyMaterialProvider(
                        X509KeyManager keyManager, String password, Iterable<String> aliases) {
                    super(keyManager, password);
                    materialMap = new HashMap<String, Object>();
                    boolean initComplete = false;
                    try {
                        for (String alias: aliases) {
                            if (alias != null && !materialMap.containsKey(alias)) {
                                try {
                                    materialMap.put(alias, super.chooseKeyMaterial(
                                            UnpooledByteBufAllocator.DEFAULT, alias));
                                } catch (Exception e) {
                                    // Just store the exception and rethrow it when we try to choose the keymaterial
                                    // for this alias later on.
                                    materialMap.put(alias, e);
                                }
                            }
                        }
                        initComplete = true;
                    } finally {
                        if (!initComplete) {
                            destroy();
                        }
                    }
                    checkNonEmpty(materialMap, "materialMap");
                }

                @Override
                OpenSslKeyMaterial chooseKeyMaterial(ByteBufAllocator allocator, String alias) throws Exception {
                    Object value = materialMap.get(alias);
                    if (value == null) {
                        // There is no keymaterial for the requested alias, return null
                        return null;
                    }
                    if (value instanceof OpenSslKeyMaterial) {
                        return ((OpenSslKeyMaterial) value).retain();
                    }
                    throw (Exception) value;
                }

                @Override
                void destroy() {
                    for (Object material: materialMap.values()) {
                        ReferenceCountUtil.release(material);
                    }
                    materialMap.clear();
                }
            }

Frequently Asked Questions

What is the OpenSslPopulatedKeyMaterialProvider class?
OpenSslPopulatedKeyMaterialProvider is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactory.java.
Where is OpenSslPopulatedKeyMaterialProvider defined?
OpenSslPopulatedKeyMaterialProvider is defined in handler/src/main/java/io/netty/handler/ssl/OpenSslX509KeyManagerFactory.java at line 183.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free