All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.quarkiverse.cxf.it.security.policy.BeanProducers Maven / Gradle / Ivy

package io.quarkiverse.cxf.it.security.policy;

import java.io.IOException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Named;

import org.apache.cxf.ext.logging.LoggingFeature;
import org.apache.cxf.ext.logging.event.LogEvent;
import org.apache.cxf.ext.logging.slf4j.Slf4jVerboseEventSender;
import org.apache.wss4j.common.cache.ReplayCache;

public class BeanProducers {

    @Produces
    @ApplicationScoped
    @Named
    public RecordingReplayCache recordingReplayCache() {
        return new RecordingReplayCache();
    }

    @Produces
    @ApplicationScoped
    @Named
    public MessageCollector messageCollector() {
        return new MessageCollector();
    }

    public static class MessageCollector extends LoggingFeature {

        private final Object lock = new Object();
        private List messages = new ArrayList<>();

        public MessageCollector() {
            this.setPrettyLogging(true);
            this.setSender(new Slf4jVerboseEventSender() {
                @Override
                protected String getLogMessage(LogEvent event) {
                    String msg = super.getLogMessage(event);
                    synchronized (lock) {
                        messages.add(msg);
                    }
                    return msg;
                }
            });
        }

        public List drainMessages() {
            synchronized (lock) {
                List result = messages;
                this.messages = new ArrayList<>();
                return result;
            }
        }
    }

    public static class RecordingReplayCache implements ReplayCache {

        private final Object lock = new Object();
        private List entries = new ArrayList<>();

        @Override
        public void close() throws IOException {
        }

        @Override
        public void add(String item) {
            synchronized (lock) {
                entries.add(item);
            }
        }

        @Override
        public void add(String item, Instant ts) {
            add(item + "/" + ts);
        }

        @Override
        public boolean contains(String arg0) {
            return false;
        }

        public List drainEntries() {
            synchronized (lock) {
                List result = entries;
                this.entries = new ArrayList<>();
                return result;
            }
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy