Code, JavaEE

Spring JMS : Default Message Listener


public abstract class DefaultMessageListener implements MessageListener, XmlSchemaAware {
 private static final String UTF8_ENCODING = "UTF-8";

// Inject property from spring xml configuration
 private String xmlSchemaFilePath;

public DefaultMessageListener() {}

@Override
 public void onMessage(Message message) {
 if (message instanceof TextMessage) {
 TextMessage textMessage = (TextMessage)message;

InputStream xmlInputStream = convertMessageToStream(textMessage);

XmlValidator xmlValidator = new DefaultXmlValidator(xmlSchemaFilePath);

if (xmlValidator.validateXml(xmlInputStream)) {
 // process the message
 process(xmlInputStream);
 } else {
 // can't process, notify
 }
 } else {
 // can't process, notify
 }
 }

@Override
 public void setXmlSchemaFilePath(String xmlSchemaFilePath) {
 this.xmlSchemaFilePath = xmlSchemaFilePath;
 }

private InputStream convertMessageToStream(TextMessage textMessage) {
 InputStream xmlInputStream = null;
 try {
 xmlInputStream = new ByteArrayInputStream(textMessage.getText().getBytes(UTF8_ENCODING));
 } catch (JMSException ex) {
 // process the exception, notify
 } catch (UnsupportedEncodingException e) {
 // process the exception, notify
 }

return xmlInputStream;
 }

protected Object convertStreamToObject(Class clazz, InputStream stream) {
 Object objToReturn = null;

try {
 JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
 objToReturn = unmarshaller.unmarshal(stream);

if (null == objToReturn) {
 // notify
 }
 } catch (JAXBException ex) {
 // process the exception, notify
 }
 return objToReturn;
 }

/**
 * process - subclasses implement this method
 * @param xmlInputStream
 */
 public abstract void process(InputStream xmlInputStream);
}</pre>
public class DefaultXmlValidator implements XmlValidator {
 private String xmlSchemaFilePath;

public DefaultXmlValidator(String xmlSchemaFilePath) {
 this.xmlSchemaFilePath = xmlSchemaFilePath;
 }

@Override
 public Boolean validateXml(InputStream xmlStream) {
 SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
 try {
 Schema schema = schemaFactory.newSchema(getClass().getResource(xmlSchemaFilePath));
 Validator validator = schema.newValidator();
 validator.validate(new StreamSource(xmlStream));
 } catch (SAXException e) {
 // process the exception, notify
 return Boolean.FALSE;
 } catch (IOException e) {
 // process the exception, notify
 return Boolean.FALSE;
 }
 return Boolean.TRUE;
 }
}
<pre>
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s