Как работать в Esper, если источник отправляет файлы событий xml с двумя или более различными схемами?
public ParseEvents()
{
String classpathLocation_plm = "com/esper/Resources/dataPkt.xsd";
String classpathLocation_status = "com/esper/Resources/helloPkt.xsd";
URL schemaURL_plm = this.getClass().getClassLoader().getResource(classpathLocation_plm);
URL schemaURL_status = this.getClass().getClassLoader().getResource(classpathLocation_status);
//System.out.println(schemaURL.getPath());
ConfigurationEventTypeXMLDOM plmcfg = new ConfigurationEventTypeXMLDOM();
ConfigurationEventTypeXMLDOM plmstatus = new ConfigurationEventTypeXMLDOM();
epService = EPServiceProviderManager.getDefaultProvider();
epService1 = EPServiceProviderManager.getDefaultProvider();
plmcfg.setRootElementName("PACKET");
plmcfg.setSchemaResource(schemaURL_plm.toString());
plmstatus.setRootElementName("PACKET");
plmstatus.setSchemaResource(schemaURL_status.toString());
plmAdm = epService.getEPAdministrator();
plmAdm1 = epService1.getEPAdministrator();
plmAdm.getConfiguration().addEventType("PlmEvent", plmcfg);
plmAdm1.getConfiguration().addEventType("PlmStatus", plmstatus);
} У меня есть две схемы в classpath проекта Java. Теперь XML-файлы (как события), поступающие в механизм esper, не понимают, какую схему следует понимать. Как можно решить эту проблему? Эксперты, пожалуйста, предложите!
2 ответа
Если все события XML имеют одинаковое имя корневого элемента, используйте EventSender для определения типа отправляемых событий, а именно: EventSender s1 = epService.getEPRuntime(). GetEventSender("PlmEvent") EventSender s2 = epService.getEPRuntime(). GetEventSender("PlmStatus")
создать некоторые операторы EPL, такие как "select * from PlmEvent" и отправлять события через "s1.sendEvent(xmldoc)"
Спасибо за решение. Я попробовал другой выход. После того, как событие xml отправлено, после синтаксического анализа XML анализатором DOM создается документ, а затем этот документ отправляется в качестве события в механизм Esper. Я проверяю имя тега, а затем событие XML опрашивает с соответствующей схемой.
doc = builderFactory.newDocumentBuilder().parse(source);
doc.getDocumentElement().normalize();
if((doc.getElementsByTagName("PSTATUS").getLength() != 0))
{
System.out.println("*** In Status packet ***");
EPStatement cepStatement3 = plmAdm1.createEPL("select * from " + "PlmStatus");
cepStatement3.addListener(new CEPListener2());
}
else
{
System.out.println("*** In Energy packet ***");
}