public static BasicContentHeaderProperties convertContentHeaderProperties()

in broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java [56:207]


    public static BasicContentHeaderProperties convertContentHeaderProperties(MessageTransferMessage messageTransferMessage,
                                                                              NamedAddressSpace addressSpace)
    {
        BasicContentHeaderProperties props = new BasicContentHeaderProperties();

        Header header = messageTransferMessage.getHeader();
        DeliveryProperties deliveryProps = header.getDeliveryProperties();
        MessageProperties messageProps = header.getMessageProperties();

        if(deliveryProps != null)
        {
            if(deliveryProps.hasDeliveryMode())
            {
                props.setDeliveryMode((deliveryProps.getDeliveryMode() == MessageDeliveryMode.PERSISTENT
                                              ? BasicContentHeaderProperties.PERSISTENT
                                              : BasicContentHeaderProperties.NON_PERSISTENT));
            }

            if (deliveryProps.hasTtl())
            {
                props.setExpiration(messageTransferMessage.getArrivalTime() + deliveryProps.getTtl());
            }
            else if(deliveryProps.hasExpiration())
            {
                props.setExpiration(deliveryProps.getExpiration());
            }

            if(deliveryProps.hasPriority())
            {
                props.setPriority((byte) deliveryProps.getPriority().getValue());
            }

            if(deliveryProps.hasTimestamp())
            {
                props.setTimestamp(deliveryProps.getTimestamp());
            }
            else
            {
                props.setTimestamp(messageTransferMessage.getArrivalTime());
            }
        }
        if(messageProps != null)
        {
            if(messageProps.hasAppId())
            {
                try
                {
                    props.setAppId(AMQShortString.createAMQShortString(messageProps.getAppId()));
                }
                catch (IllegalArgumentException e)
                {
                    // pass
                }
            }
            if(messageProps.hasContentType())
            {
                props.setContentType(messageProps.getContentType());
            }
            if(messageProps.hasCorrelationId())
            {
                try
                {
                    props.setCorrelationId(AMQShortString.createAMQShortString(messageProps.getCorrelationId()));
                }
                catch (IllegalArgumentException e)
                {
                    throw new MessageConversionException("Could not convert message from 0-10 to 0-8 because conversion of 'correlationId' failed.", e);
                }
            }
            if(messageProps.hasContentEncoding())
            {
                props.setEncoding(messageProps.getContentEncoding());
            }
            if(messageProps.hasMessageId())
            {
                // Add prefix 'ID:' to workaround broken 0-8..0-9-1 Qpid JMS client
                props.setMessageId("ID:" + messageProps.getMessageId().toString());
            }
            if(messageProps.hasReplyTo())
            {
                ReplyTo replyTo = messageProps.getReplyTo();
                String exchangeName = replyTo.getExchange();
                String routingKey = replyTo.getRoutingKey();
                if(exchangeName == null)
                {
                    exchangeName = "";
                }

                if (!"".equals(exchangeName) || (routingKey != null && !"".equals(routingKey)))
                {
                    MessageDestination destination = addressSpace.getAttainedMessageDestination(exchangeName, false);
                    Exchange<?> exchange = destination instanceof Exchange ? (Exchange<?>) destination : null;

                    String exchangeClass = exchange == null
                            ? ExchangeDefaults.DIRECT_EXCHANGE_CLASS
                            : exchange.getType();
                    String routingKeyOption = routingKey == null ? "" : "?routingkey='" + routingKey + "'";
                    final String replyToBindingUrl =
                            String.format("%s://%s//%s", exchangeClass, exchangeName, routingKeyOption);
                    try
                    {
                        props.setReplyTo(replyToBindingUrl);
                    }
                    catch (IllegalArgumentException e)
                    {
                        throw new MessageConversionException("Could not convert message from 0-10 to 0-8 because conversion of 'reply-to' failed.", e);
                    }
                }
            }
            if(messageProps.hasUserId())
            {
                try
                {
                    props.setUserId(AMQShortString.createAMQShortString(messageProps.getUserId()));
                }
                catch (IllegalArgumentException e)
                {
                    // ignore
                }
            }

            if(messageProps.hasApplicationHeaders())
            {
                Map<String, Object> appHeaders = new HashMap<>(messageProps.getApplicationHeaders());
                if(messageProps.getApplicationHeaders().containsKey("x-jms-type"))
                {
                    String jmsType = String.valueOf(appHeaders.remove("x-jms-type"));
                    try
                    {
                        props.setType(jmsType);
                    }
                    catch (IllegalArgumentException e)
                    {
                        throw new MessageConversionException("Could not convert message from 0-10 to 0-8 because x-jms-type conversion failed.", e);
                    }
                }

                FieldTable ft;
                try
                {
                    ft = FieldTableFactory.createFieldTable(appHeaders);
                }
                catch (IllegalArgumentException | AMQPInvalidClassException e)
                {
                    throw new MessageConversionException("Could not convert message from 0-10 to 0-8 because conversion of application headers failed.", e);
                }
                props.setHeaders(ft);
            }
        }

        return props;
    }