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

org.eclipse.ditto.connectivity.service.messaging.amqp.JMSMessageWorkaround Maven / Gradle / Ivy

/*
 * Copyright (c) 2019 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 */
package org.eclipse.ditto.connectivity.service.messaging.amqp;

import java.util.Enumeration;

import javax.jms.Destination;
import javax.jms.JMSException;

import org.apache.qpid.jms.JmsAcknowledgeCallback;
import org.apache.qpid.jms.JmsConnection;
import org.apache.qpid.jms.message.JmsMessage;
import org.apache.qpid.jms.message.facade.JmsMessageFacade;

/**
 * Fake JMS message to defeat the Qpid client when it tries to set AMQP properties willy-nilly.
 * Override all the setters to do nothing if already set.
 */
public final class JMSMessageWorkaround extends JmsMessage {

    private final JmsMessage message;

    private JMSMessageWorkaround(final JmsMessage message) {
        super(message.getFacade());
        // ignore everything; delegate all public methods to message.
        this.message = message;
        // copy message anyway because "getBody" is final (why?)
        copy(message);
    }

    /**
     * Wrap a JMS message in this class. The wrapped JMS message should not be used anywhere else afterwards.
     *
     * @param jmsMessage the JMS message.
     * @return the wrapper which takes over its identity.
     */
    public static JmsMessage wrap(final JmsMessage jmsMessage) {
        return new JMSMessageWorkaround(jmsMessage);
    }

    @Override
    public String toString() {
        return getClass().getSimpleName() + "[" + message.toString() + "]";
    }

    @Override
    public JmsMessage copy() throws JMSException {
        return new JMSMessageWorkaround(message.copy());
    }

    @Override
    public int hashCode() {
        return message.hashCode();
    }

    @Override
    public boolean equals(final Object o) {
        return message.equals(o);
    }

    @Override
    public void acknowledge() throws JMSException {
        message.acknowledge();
    }

    @Override
    public String getJMSMessageID() throws JMSException {
        return message.getJMSMessageID();
    }

    @Override
    public void setJMSMessageID(final String id) throws JMSException {
        if (message.getJMSMessageID() == null) {
            message.setJMSMessageID(id);
        }
    }

    @Override
    public long getJMSTimestamp() throws JMSException {
        return message.getJMSTimestamp();
    }

    @Override
    public void setJMSTimestamp(final long timestamp) throws JMSException {
        if (message.getJMSTimestamp() == 0L) {
            message.setJMSTimestamp(timestamp);
        }
    }

    @Override
    public byte[] getJMSCorrelationIDAsBytes() throws JMSException {
        return message.getJMSCorrelationIDAsBytes();
    }

    @Override
    public void setJMSCorrelationIDAsBytes(final byte[] correlationID) throws JMSException {
        if (message.getJMSCorrelationID() == null) {
            message.setJMSCorrelationIDAsBytes(correlationID);
        }
    }

    @Override
    public String getJMSCorrelationID() throws JMSException {
        return message.getJMSCorrelationID();
    }

    @Override
    public void setJMSCorrelationID(final String correlationID) throws JMSException {
        if (message.getJMSCorrelationID() == null) {
            message.setJMSCorrelationID(correlationID);
        }
    }

    @Override
    public Destination getJMSReplyTo() throws JMSException {
        return message.getJMSReplyTo();
    }

    @Override
    public void setJMSReplyTo(final Destination replyTo) throws JMSException {
        if (message.getJMSReplyTo() == null) {
            message.setJMSReplyTo(replyTo);
        }
    }

    @Override
    public Destination getJMSDestination() throws JMSException {
        return message.getJMSDestination();
    }

    @Override
    public void setJMSDestination(final Destination destination) throws JMSException {
        if (message.getJMSDestination() == null) {
            message.setJMSDestination(destination);
        }
    }

    @Override
    public int getJMSDeliveryMode() throws JMSException {
        return message.getJMSDeliveryMode();
    }

    @Override
    public void setJMSDeliveryMode(final int deliveryMode) throws JMSException {
        // not settable as AMQP property
        message.setJMSDeliveryMode(deliveryMode);
    }

    @Override
    public boolean getJMSRedelivered() throws JMSException {
        return message.getJMSRedelivered();
    }

    @Override
    public void setJMSRedelivered(final boolean redelivered) throws JMSException {
        // not settable as AMQP property
        message.setJMSRedelivered(redelivered);
    }

    @Override
    public String getJMSType() throws JMSException {
        return message.getJMSType();
    }

    @Override
    public void setJMSType(final String type) throws JMSException {
        if (message.getJMSType() == null) {
            message.setJMSType(type);
        }
    }

    @Override
    public long getJMSExpiration() throws JMSException {
        return message.getJMSExpiration();
    }

    @Override
    public void setJMSExpiration(final long expiration) throws JMSException {
        if (message.getJMSExpiration() == 0L) {
            message.setJMSExpiration(expiration);
        }
    }

    @Override
    public int getJMSPriority() throws JMSException {
        return message.getJMSPriority();
    }

    @Override
    public void setJMSPriority(final int priority) throws JMSException {
        // not settable as AMQP property
        message.setJMSPriority(priority);
    }

    @Override
    public long getJMSDeliveryTime() throws JMSException {
        return message.getJMSDeliveryTime();
    }

    @Override
    public void setJMSDeliveryTime(final long deliveryTime) throws JMSException {
        // not settable as AMQP property
        message.setJMSDeliveryTime(deliveryTime);
    }

    @Override
    public void clearProperties() throws JMSException {
        message.clearProperties();
    }

    @Override
    public boolean isBodyAssignableTo(final Class target) throws JMSException {
        return message.isBodyAssignableTo(target);
    }

    @Override
    protected  T doGetBody(final Class asType) throws JMSException {
        return message.getBody(asType);
    }

    @Override
    public void clearBody() throws JMSException {
        message.clearBody();
    }

    @Override
    public boolean isValidatePropertyNames() {
        return message.isValidatePropertyNames();
    }

    @Override
    public void setValidatePropertyNames(final boolean validatePropertyNames) {
        message.setValidatePropertyNames(validatePropertyNames);
    }

    @Override
    public boolean isReadOnly() {
        return message.isReadOnly();
    }

    @Override
    public void setReadOnly(final boolean readOnly) {
        message.setReadOnly(readOnly);
    }

    @Override
    public boolean isReadOnlyBody() {
        return message.isReadOnlyBody();
    }

    @Override
    public void setReadOnlyBody(final boolean readOnlyBody) {
        message.setReadOnlyBody(readOnlyBody);
    }

    @Override
    public boolean isReadOnlyProperties() {
        return message.isReadOnlyProperties();
    }

    @Override
    public void setReadOnlyProperties(final boolean readOnlyProperties) {
        message.setReadOnlyProperties(readOnlyProperties);
    }

    @Override
    public boolean propertyExists(final String name) throws JMSException {
        return message.propertyExists(name);
    }

    @Override
    public Enumeration getPropertyNames() throws JMSException {
        return message.getPropertyNames();
    }

    @Override
    public Enumeration getAllPropertyNames() throws JMSException {
        return message.getAllPropertyNames();
    }

    @Override
    public void setObjectProperty(final String name, final Object value) throws JMSException {
        message.setObjectProperty(name, value);
    }

    @Override
    public Object getObjectProperty(final String name) throws JMSException {
        return message.getObjectProperty(name);
    }

    @Override
    public boolean getBooleanProperty(final String name) throws JMSException {
        return message.getBooleanProperty(name);
    }

    @Override
    public byte getByteProperty(final String name) throws JMSException {
        return message.getByteProperty(name);
    }

    @Override
    public short getShortProperty(final String name) throws JMSException {
        return message.getShortProperty(name);
    }

    @Override
    public int getIntProperty(final String name) throws JMSException {
        return message.getIntProperty(name);
    }

    @Override
    public long getLongProperty(final String name) throws JMSException {
        return message.getLongProperty(name);
    }

    @Override
    public float getFloatProperty(final String name) throws JMSException {
        return message.getFloatProperty(name);
    }

    @Override
    public double getDoubleProperty(final String name) throws JMSException {
        return message.getDoubleProperty(name);
    }

    @Override
    public String getStringProperty(final String name) throws JMSException {
        return message.getStringProperty(name);
    }

    @Override
    public void setBooleanProperty(final String name, final boolean value) throws JMSException {
        message.setBooleanProperty(name, value);
    }

    @Override
    public void setByteProperty(final String name, final byte value) throws JMSException {
        message.setByteProperty(name, value);
    }

    @Override
    public void setShortProperty(final String name, final short value) throws JMSException {
        message.setShortProperty(name, value);
    }

    @Override
    public void setIntProperty(final String name, final int value) throws JMSException {
        message.setIntProperty(name, value);
    }

    @Override
    public void setLongProperty(final String name, final long value) throws JMSException {
        message.setLongProperty(name, value);
    }

    @Override
    public void setFloatProperty(final String name, final float value) throws JMSException {
        message.setFloatProperty(name, value);
    }

    @Override
    public void setDoubleProperty(final String name, final double value) throws JMSException {
        message.setDoubleProperty(name, value);
    }

    @Override
    public void setStringProperty(final String name, final String value) throws JMSException {
        message.setStringProperty(name, value);
    }

    @Override
    public JmsAcknowledgeCallback getAcknowledgeCallback() {
        return message.getAcknowledgeCallback();
    }

    @Override
    public void setAcknowledgeCallback(final JmsAcknowledgeCallback jmsAcknowledgeCallback) {
        message.setAcknowledgeCallback(jmsAcknowledgeCallback);
    }

    @Override
    public void onSend(final long producerTtl) throws JMSException {
        message.onSend(producerTtl);
    }

    @Override
    public void onSendComplete() {
        message.onSendComplete();
    }

    @Override
    public void onDispatch() throws JMSException {
        message.onDispatch();
    }

    @Override
    public JmsConnection getConnection() {
        return message.getConnection();
    }

    @Override
    public void setConnection(final JmsConnection connection) {
        message.setConnection(connection);
    }

    @Override
    public JmsMessageFacade getFacade() {
        return message.getFacade();
    }

    @Override
    public boolean isExpired() {
        return message.isExpired();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy