/*******************************************************************************
* Copyright (c) 2009, 2010 Progress Software Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
// Copyright (c) 2009 Progress Software Corporation.
package org.fusesource.tools.messaging.jms.message;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.jms.JMSException;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.fusesource.tools.core.message.Message;
import org.fusesource.tools.message.types.AbstractMessageLoader;
import org.fusesource.tools.message.types.XMLMessageTypeProvider;
import org.fusesource.tools.messaging.jms.JMSConstants;
public class FUSEXMLMessageTypeProvider extends XMLMessageTypeProvider {
@Override
public Message convertMessage(Object msg) throws JMSException {
javax.jms.TextMessage message = (javax.jms.TextMessage) msg;
Message messageType = ((FUSEXMLMessageLoader) getMessageLoader()).getMessageModel(message);
messageType.setType(getType());
messageType.setProviderId(getProviderId());
messageType.setProviderName(getProviderId());
return messageType;
}
@Override
public boolean canHandle(Object message) {
// FUSE XML does not have separate XML message type extensions
// Uses ActiveMQTextMessage to send XML content also.
// We do a primitive check here to figure whether it is XML content
if (message instanceof ActiveMQTextMessage) {
ActiveMQTextMessage textMessage = (ActiveMQTextMessage) message;
try {
String text = textMessage.getText();
if (text == null) {
return false;
}
text = text.trim();
if ((text.startsWith("<")) && (text.endsWith(">"))) {
return true;
}
} catch (JMSException e) {
e.printStackTrace();
}
}
return false;
}
/**
* Clients can override this method to add JMS provider specific headers
*/
@Override
public Map<String, String> getHeaders() {
HashMap<String, String> headers = new LinkedHashMap<String, String>();
headers.put(JMSConstants.JMSCORRELATION_ID, "");
headers.put(JMSConstants.JMSREPLY_TO, "");
headers.put(JMSConstants.JMSTYPE, "");
return headers;
}
@Override
protected AbstractMessageLoader getMessageLoader() {
return new FUSEXMLMessageLoader();
}
}