Как работать в 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 ***");

            }
Другие вопросы по тегам