class HazelcastSAMLMessageStore implements SAMLMessageStore {

    private static final String MAP_NAME = HazelcastSAMLMessageStore.class.getSimpleName();

    private final HazelcastInstance hazelcastInstance;

    /**
     * <p>Constructor for HazelcastSAMLMessageStore.</p>
     *
     * @param hazelcastInstance a {@link HazelcastInstance} object
     */
    public HazelcastSAMLMessageStore(final HazelcastInstance hazelcastInstance) {
        CommonHelper.assertNotNull("hazelcastInstance", hazelcastInstance);
        this.hazelcastInstance = hazelcastInstance;
    }

    private IMap<String, String> getStoreMapInstance() {
        IMap<String, String> inst = hazelcastInstance.getMap(MAP_NAME);
        LOGGER.debug("Located Hazelcast map instance [{}]", MAP_NAME);
        return inst;
    }

    /** {@inheritDoc} */
    @Override
    public Optional<XMLObject> get(final String messageID) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override
    public void set(final String messageID, final XMLObject message) {
        IMap<String, String> map = getStoreMapInstance();
        LOGGER.debug("Storing message {} to Hazelcast map {}", messageID, MAP_NAME);
        map.put(messageID, Base64.getEncoder().encodeToString(
                Configuration.serializeSamlObject(message).toString().getBytes(StandardCharsets.UTF_8)));
    }

    /** {@inheritDoc} */
    @Override
    public void remove(final String messageID) {
        IMap<String, String> map = getStoreMapInstance();
        LOGGER.debug("Removing message {} from Hazelcast map {}", messageID, MAP_NAME);
        map.remove(messageID);
    }
}

        IMap<String, String> map = getStoreMapInstance();
        LOGGER.debug("Attempting to get message {} from Hazelcast map {}", messageID, MAP_NAME);

        String message = map.get(messageID);
        if (message == null) {
            LOGGER.debug("Message {} not found in Hazelcast map {}", messageID, MAP_NAME);
            return Optional.empty();
        }

        LOGGER.debug("Message {} found in Hazelcast map {}, clearing", messageID, MAP_NAME);
        map.remove(messageID);

        return Configuration.deserializeSamlObject(
                new String(Base64.getDecoder().decode(message), StandardCharsets.UTF_8));
    
<no_super_class>