package rocks.inspectit.agent.java.sdk.opentracing.internal.propagation; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import io.opentracing.propagation.TextMap; import rocks.inspectit.agent.java.sdk.opentracing.propagation.AbstractPropagator; /** * Propagator that tries to encode the values using {@link URLEncoder} and {@link URLDecoder}. Uses * {@value #UTF_8} encoding. * * @author Ivan Senic * */ public class UrlEncodingPropagator extends AbstractPropagator<TextMap> { /** * Constant. */ private static final String UTF_8 = "UTF-8"; /** * {@inheritDoc} */ @Override protected void injectBaggage(TextMap carrier, String key, String value) { try { carrier.put(key, URLEncoder.encode(value, UTF_8)); } catch (UnsupportedEncodingException e) { carrier.put(key, value); } } /** * {@inheritDoc} */ @Override protected Iterable<Entry<String, String>> extractBaggage(TextMap carrier) { if ((null == carrier) || (null == carrier.iterator())) { return null; } Map<String, String> map = new HashMap<String, String>(); for (Entry<String, String> entry : carrier) { try { map.put(entry.getKey(), URLDecoder.decode(entry.getValue(), UTF_8)); } catch (UnsupportedEncodingException e) { map.put(entry.getKey(), entry.getValue()); } } return map.entrySet(); } }