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

org.apache.camel.tracing.propagation.CamelMessagingHeadersInjectAdapter Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.camel.tracing.propagation;

import java.util.Map;

import org.apache.camel.tracing.InjectAdapter;

public final class CamelMessagingHeadersInjectAdapter implements InjectAdapter {

    // As per the JMS specs, header names must be valid Java identifier part
    // characters.
    // This means that any header names that contain illegal characters (- for
    // example) should be handled correctly
    // Opentracing java-jms does it as follows.
    static final String JMS_DASH = "_$dash$_";

    private final Map map;
    private final boolean jmsEncoding;

    public CamelMessagingHeadersInjectAdapter(final Map map, boolean jmsEncoding) {
        this.map = map;
        this.jmsEncoding = jmsEncoding;
    }

    @Override
    public void put(String key, String value) {
        // Assume any header property that begins with 'Camel' is for internal
        // use
        if (!key.startsWith("Camel")) {
            this.map.put(encodeDash(key), value);
        }
    }

    /**
     * Encode all dashes because JMS specification doesn't allow them in property name
     */
    private String encodeDash(String key) {
        if (key == null || key.isEmpty() || !jmsEncoding) {
            return key;
        }

        return key.replace("-", JMS_DASH);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy