@Override
 public void send(Serializable message) throws NamingException, JMSException {
   try {
     ShipmentFailedMessage shipmentFailedMessage =
         MessageUtil.getPart(message, "shipmentFailedMessage");
     String replyToDestination = getReplyToDestination(shipmentFailedMessage, "ShipmentFailed");
     send(replyToDestination, shipmentFailedMessage);
     log.info("#### [shipper]: ShipmentFailed response sent");
   } catch (Exception e) {
     throw ExceptionUtil.rewrap(e);
   }
 }
  @Override
  @TransactionAttribute(REQUIRED)
  public void onMessage(javax.jms.Message jmsMessage) {
    if (!isInitialized()) return;

    try {
      Event event = MessageUtil.getPart(jmsMessage, "event");

      // validate the message
      eventLoggerContext.initializeContext(jmsMessage);
      eventLoggerContext.validate(event);

      // handle the message
      logEventHandler.logEvent(event);

    } catch (Throwable e) {
      log.error(e);
      // TODO send this exception to "invalid" queue
      eventLoggerContext.fire_LogEvent_incoming_request_aborted(e);
    }
  }