All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.espertech.esper.event.EventSenderXMLDOM Maven / Gradle / Ivy

There is a newer version: 7.1.0
Show newest version
/**************************************************************************************
 * Copyright (C) 2006-2015 EsperTech Inc. All rights reserved.                        *
 * http://www.espertech.com/esper                                                          *
 * http://www.espertech.com                                                           *
 * ---------------------------------------------------------------------------------- *
 * The software in this package is published under the terms of the GPL license       *
 * a copy of which has been included with this distribution in the license.txt file.  *
 **************************************************************************************/
package com.espertech.esper.event;

import com.espertech.esper.client.EPException;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.EventSender;
import com.espertech.esper.core.service.EPRuntimeEventSender;
import com.espertech.esper.core.thread.InboundUnitSendWrapped;
import com.espertech.esper.core.thread.ThreadingOption;
import com.espertech.esper.core.thread.ThreadingService;
import com.espertech.esper.event.xml.BaseXMLEventType;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 * Event sender for XML DOM-backed events.
 * 

* Allows sending only event objects of type Node or Document, does check the root name of the XML document * which must match the event type root name as configured. Any other event object generates an error. */ public class EventSenderXMLDOM implements EventSender { private final EPRuntimeEventSender runtimeEventSender; private final BaseXMLEventType baseXMLEventType; private final boolean validateRootElement; private final EventAdapterService eventAdapterService; private final ThreadingService threadingService; /** * Ctor. * @param runtimeEventSender for processing events * @param baseXMLEventType the event type * @param threadingService for inbound threading * @param eventAdapterService for event bean creation */ public EventSenderXMLDOM(EPRuntimeEventSender runtimeEventSender, BaseXMLEventType baseXMLEventType, EventAdapterService eventAdapterService, ThreadingService threadingService) { this.runtimeEventSender = runtimeEventSender; this.baseXMLEventType = baseXMLEventType; this.validateRootElement = baseXMLEventType.getConfigurationEventTypeXMLDOM().isEventSenderValidatesRoot(); this.eventAdapterService = eventAdapterService; this.threadingService = threadingService; } public void sendEvent(Object theEvent) throws EPException { sendEvent(theEvent, false); } public void route(Object theEvent) throws EPException { sendEvent(theEvent, true); } private void sendEvent(Object node, boolean isRoute) throws EPException { Node namedNode; if (node instanceof Document) { namedNode = ((Document) node).getDocumentElement(); } else if (node instanceof Element) { namedNode = (Element) node; } else { throw new EPException("Unexpected event object type '" + node.getClass().getName() + "' encountered, please supply a org.w3c.dom.Document or Element node"); } if (validateRootElement) { String getNodeName = namedNode.getLocalName(); if (getNodeName == null) { getNodeName = namedNode.getNodeName(); } if (!getNodeName.equals(baseXMLEventType.getRootElementName())) { throw new EPException("Unexpected root element name '" + getNodeName + "' encountered, expected a root element name of '" + baseXMLEventType.getRootElementName() + "'"); } } EventBean theEvent = eventAdapterService.adapterForTypedDOM(namedNode, baseXMLEventType); if (isRoute) { runtimeEventSender.routeEventBean(theEvent); } else { if ((ThreadingOption.isThreadingEnabled) && (threadingService.isInboundThreading())) { threadingService.submitInbound(new InboundUnitSendWrapped(theEvent, runtimeEventSender)); } else { runtimeEventSender.processWrappedEvent(theEvent); } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy