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

io.tracee.binding.springws.AbstractTraceeInterceptor Maven / Gradle / Ivy

The newest version!
package io.tracee.binding.springws;

import io.tracee.TraceeBackend;
import io.tracee.configuration.TraceeFilterConfiguration;
import io.tracee.configuration.TraceeFilterConfiguration.Channel;
import io.tracee.transport.SoapHeaderTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ws.WebServiceMessage;
import org.springframework.ws.soap.SoapHeader;
import org.springframework.ws.soap.SoapHeaderElement;
import org.springframework.ws.soap.SoapHeaderException;
import org.springframework.ws.soap.SoapMessage;

import java.util.Collections;
import java.util.Iterator;
import java.util.Map;

import static io.tracee.TraceeConstants.SOAP_HEADER_QNAME;

abstract class AbstractTraceeInterceptor {

	protected static final SoapHeaderTransport soapHeaderTransport = new SoapHeaderTransport();

	protected final TraceeBackend backend;
	protected static final Logger logger = LoggerFactory.getLogger(AbstractTraceeInterceptor.class);
	protected final String profile;

	public AbstractTraceeInterceptor(final TraceeBackend backend, final String profile) {
		this.backend = backend;
		this.profile = profile;
	}

	protected void parseContextFromSoapHeader(final WebServiceMessage message, final Channel channel) {
		if (message instanceof SoapMessage) {
			final SoapMessage soapMessage = (SoapMessage) message;

			final TraceeFilterConfiguration filterConfiguration = backend.getConfiguration(profile);

			if (filterConfiguration.shouldProcessContext(channel)) {
				final SoapHeader soapHeader = soapMessage.getSoapHeader();
				if (soapHeader != null) {
					Iterator tpicHeaders;
					try {
						tpicHeaders = soapHeader.examineHeaderElements(SOAP_HEADER_QNAME);
					} catch (SoapHeaderException ignored) {
						tpicHeaders = Collections.emptyList().iterator();
					}
					if (tpicHeaders.hasNext()) {
						final Map parsedTpic = soapHeaderTransport.parseTpicHeader(tpicHeaders.next().getSource());
						backend.putAll(filterConfiguration.filterDeniedParams(parsedTpic, channel));
					}
				}
			}
		} else {
			logger.info("Message is obviously no soap message - Not instance of Spring-WS SoapMessage");
		}
	}

	protected void serializeContextToSoapHeader(final WebServiceMessage message, final Channel channel) {
		if (message instanceof SoapMessage) {
			final SoapMessage soapMessage = (SoapMessage) message;

			final TraceeFilterConfiguration filterConfiguration = backend.getConfiguration(profile);

			if (!backend.isEmpty() && filterConfiguration.shouldProcessContext(channel)) {
				final SoapHeader soapHeader = soapMessage.getSoapHeader();
				if (soapHeader != null) {

					final Map context = filterConfiguration.filterDeniedParams(backend.copyToMap(), channel);
					soapHeaderTransport.renderSoapHeader(context, soapHeader.getResult());
				}
			}
		} else {
			logger.info("Message is obviously no soap message - Not instance of Spring-WS SoapMessage");
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy