/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.impl.wsdl.submit.transports.jms; import com.eviware.soapui.SoapUI; import com.eviware.soapui.config.JMSPropertyConfig; import com.eviware.soapui.impl.support.AbstractHttpRequest; import com.eviware.soapui.impl.wsdl.support.jms.header.JMSHeaderConfig; import com.eviware.soapui.impl.wsdl.support.jms.property.JMSPropertiesConfig; import com.eviware.soapui.model.iface.Request; import com.eviware.soapui.model.iface.SubmitContext; import com.eviware.soapui.model.propertyexpansion.PropertyExpander; import com.eviware.soapui.support.types.StringToStringMap; import com.eviware.soapui.support.types.StringToStringsMap; import hermes.Domain; import hermes.Hermes; import javax.jms.JMSException; import javax.jms.Message; import javax.naming.NamingException; import java.util.Enumeration; import java.util.List; /** * @author nebojsa.tasic */ public class JMSHeader { public static final String JMSCORRELATIONID = "JMSCorrelationID"; public static final String JMSREPLYTO = "JMSReplyTo"; public static final String TIMETOLIVE = "timeToLive"; public static final String JMSTYPE = "JMSType"; public static final String JMSPRIORITY = "JMSPriority"; public static final String JMSDELIVERYMODE = "JMSDeliveryMode"; public static final String JMSEXPIRATION = "JMSExpiration"; public static final String JMSMESSAGEID = "JMSMessageID"; public static final String JMSTIMESTAMP = "JMSTimestamp"; public static final String JMSREDELIVERED = "JMSRedelivered"; public static final String JMSDESTINATION = "JMSDestination"; public static final String DURABLE_SUBSCRIPTION_NAME = "durableSubscriptionName"; public static final String MESSAGE_SELECTOR = "messageSelector"; public static final String CLIENT_ID = "clientID"; public static final String SEND_AS_BYTESMESSAGE = "sendAsBytesMessage"; public static final String SOAP_ACTION_ADD = "soapActionAdd"; public static final String SOAP_ACTION = "SOAPAction"; public static final String SOAPJMS_SOAP_ACTION = "SOAPJMS_soapAction"; private long timeTolive = Message.DEFAULT_TIME_TO_LIVE; public void setMessageHeaders(Message message, Request request, Hermes hermes, SubmitContext submitContext) { if (request instanceof AbstractHttpRequest) { JMSHeaderConfig jmsConfig = ((AbstractHttpRequest<?>) request).getJMSHeaderConfig(); try { // JMSCORRELATIONID if (jmsConfig.getJMSCorrelationID() != null && !jmsConfig.getJMSCorrelationID().equals("")) { message.setJMSCorrelationID(PropertyExpander.expandProperties(submitContext, jmsConfig.getJMSCorrelationID())); } // JMSREPLYTO if (jmsConfig.getJMSReplyTo() != null && !jmsConfig.getJMSReplyTo().equals("")) { message.setJMSReplyTo(hermes.getDestination( PropertyExpander.expandProperties(submitContext, jmsConfig.getJMSReplyTo()), Domain.QUEUE)); } // TIMETOLIVE if (jmsConfig.getTimeToLive() != null && !jmsConfig.getTimeToLive().equals("")) { setTimeTolive(Long.parseLong(PropertyExpander.expandProperties(submitContext, jmsConfig.getTimeToLive()))); } else { setTimeTolive(Message.DEFAULT_TIME_TO_LIVE); } // JMSTYPE if (jmsConfig.getJMSType() != null && !jmsConfig.getJMSType().equals("")) { message.setJMSType(PropertyExpander.expandProperties(submitContext, jmsConfig.getJMSType())); } // JMSPRIORITY if (jmsConfig.getJMSPriority() != null && !jmsConfig.getJMSPriority().equals("")) { message.setJMSPriority(Integer.parseInt(PropertyExpander.expandProperties(submitContext, jmsConfig.getJMSPriority()))); } else { message.setJMSPriority(Message.DEFAULT_PRIORITY); } // JMSDELIVERYMODE if (jmsConfig.getJMSDeliveryMode() != null && !jmsConfig.getJMSDeliveryMode().equals("")) { int deliveryMode = jmsConfig.getJMSDeliveryMode().equals("PERSISTENT") ? javax.jms.DeliveryMode.PERSISTENT : javax.jms.DeliveryMode.NON_PERSISTENT; message.setJMSDeliveryMode(deliveryMode); } else { message.setJMSDeliveryMode(Message.DEFAULT_DELIVERY_MODE); } } catch (NamingException e) { SoapUI.logError( e, "Message header JMSReplyTo = " + PropertyExpander.expandProperties(submitContext, jmsConfig.getJMSReplyTo()) + "destination not exists!"); } catch (Exception e) { SoapUI.logError(e, "error while seting message header properties!"); } } } public static void setMessageProperties(Message message, Request request, Hermes hermes, SubmitContext submitContext) { if (request instanceof AbstractHttpRequest) { JMSPropertiesConfig jmsPropertyConfig = ((AbstractHttpRequest<?>) request).getJMSPropertiesConfig(); try { List<JMSPropertyConfig> propertyList = jmsPropertyConfig.getJMSProperties(); StringToStringMap stringToStringMap = new StringToStringMap(propertyList.size()); for (JMSPropertyConfig jmsProperty : propertyList) { stringToStringMap.put(jmsProperty.getName(), jmsProperty.getValue()); } // CUSTOM PROPERTIES String keys[] = stringToStringMap.getKeys(); for (String key : keys) { if (!key.equals(JMSCORRELATIONID) && !key.equals(JMSREPLYTO) && !key.equals(TIMETOLIVE) && !key.equals(JMSTYPE) && !key.equals(JMSPRIORITY) && !key.equals(JMSDELIVERYMODE)) { message.setStringProperty(key, PropertyExpander.expandProperties(submitContext, stringToStringMap.get(key))); } } } catch (Exception e) { SoapUI.logError(e, "error while seting jms message properties!"); } } } public long getTimeTolive() { return timeTolive; } public void setTimeTolive(long timeTolive) { this.timeTolive = timeTolive; } public static StringToStringsMap getMessageHeadersAndProperties(Message message) { StringToStringsMap headermap = new StringToStringsMap(); try { headermap.put(JMSDELIVERYMODE, String.valueOf(message.getJMSDeliveryMode())); headermap.put(JMSEXPIRATION, String.valueOf(message.getJMSExpiration())); headermap.put(JMSPRIORITY, String.valueOf(message.getJMSPriority())); headermap.put(JMSTIMESTAMP, String.valueOf(message.getJMSTimestamp())); headermap.put(JMSREDELIVERED, String.valueOf(message.getJMSRedelivered())); if (message.getJMSDestination() != null) { headermap.put(JMSDESTINATION, String.valueOf(message.getJMSDestination())); } if (message.getJMSMessageID() != null) { headermap.put(JMSMESSAGEID, message.getJMSMessageID()); } if (message.getJMSCorrelationID() != null) { headermap.put(JMSCORRELATIONID, message.getJMSCorrelationID()); } if (message.getJMSReplyTo() != null) { headermap.put(JMSREPLYTO, String.valueOf(message.getJMSReplyTo())); } if (message.getJMSType() != null) { headermap.put(JMSTYPE, message.getJMSType()); } Enumeration<?> properties = message.getPropertyNames(); while (properties.hasMoreElements()) { String key = (String) properties.nextElement(); headermap.put(key, message.getStringProperty(key)); } } catch (JMSException e) { SoapUI.logError(e); } return headermap; } }